home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / stut_src / arbopges.c < prev    next >
C/C++ Source or Header  |  1996-05-26  |  108KB  |  4,112 lines

  1. /*
  2.  * arboedit.c
  3.  *
  4.  * Purpose:
  5.  * --------
  6.  * Fonctions permettant l'edition des pages arborescence:
  7.  *
  8.  * History:
  9.  * --------
  10.  * 1993: Created by flanque
  11.  * 18.05.94: sorti l'edition de l'arbre vers TREEEDIT.C
  12.  */
  13.  
  14.     #include "!OPTIONS.H"                /* Options de compilation */         
  15.     #define    THIS_FILE    "ARBOPGES.C v1.32 - 07.95"
  16.           
  17. /*
  18.  * System headers:
  19.  */
  20.     #include    <stdio.h>
  21.     #include <stdlib.h>
  22.     #include    <string.h>                        /* Memcpy etc... */
  23.     #include    <aes.h>                            /* header AES */  
  24.     #include <tos.h>
  25.         
  26. /*
  27.  * Custom headers:
  28.  */
  29.     #include    "ARB_OUT.H"
  30.     #include "SPEC_PU.H"                        /* Listes... */    
  31.     #include "S_MALLOC.H"
  32.     #include "STUT_ONE.RSC\STUT_3.H"        /* noms des objets ds le ressource */
  33.     #include    "DESK_PU.H"
  34.     #include    "RAMSL_PU.H"
  35.     #include    "POPUP_PU.H"                    /* Pour gestion Pop-Up */
  36.     #include "AESDEF.H"
  37.     #include "EXFRM_PU.H"
  38.     #include "FILES_PU.H"
  39.     #include    "MAIN_PU.H"    
  40.     #include    "DEBUG_PU.H"    
  41.     #include    "DATPG_PU.H"    
  42.     #include    "DTDIR_PU.H"    
  43.     #include    "OBJCT_PU.H"    
  44.     #include "ARBPG_PU.H"                    /* this! */
  45.     #include    "ARPAR_PU.H"
  46.     #include "LISTS_PU.H"
  47.     #include "PGECR_PU.H"
  48.     #include    "SRIAL_PU.H"    
  49.     #include "TERM_PU.H"
  50.     #include "MINITEL.H"
  51.     #include    "VDI_PU.H"    
  52.     #include "WIN_PU.H"                        /* Gestion des fenˆtres */
  53.     #include "WINDR_PU.H"                    /* Gestion des fenˆtres */
  54.     #include "ARBKEYPU.H"
  55.     #include    "ARBGENPU.H"
  56.  
  57. /*
  58.  * ------------------------- TYPES --------------------------
  59.  */
  60. typedef
  61.     struct
  62.     {
  63.         BOOL    b_EnableAdd     :    1;
  64.         BOOL    b_EnableDel     :    1;
  65.         BOOL    b_EnableList : 1;
  66.     }
  67.     PARPAGE_FLAGS;
  68.  
  69.  
  70. /*
  71.  * ------------------------ PROTOTYPES -------------------------
  72.  */
  73.  
  74. /*
  75.  * PRIVate internal prototypes:
  76.  */
  77.     static    void edit_ArboParList(                /* Ne renvoie rien */
  78.                         int            edit_type, 
  79.                         WIPARAMS *    pWiParams );
  80.     static    ARBO_FIELDPARS *    fix_arbo_OutFields(     /* Out: Params cr‚‚s */
  81.                                             int fnct );            /* In:  Fnct page arbo */
  82.     static    ARBO_LISTPARS *    fix_arbo_ListPars(     /* Out: Params cr‚‚s */
  83.                                             int fnct );            /* In:  Fnct page arbo */
  84.     static    ARBO_FIELDPARS *    fix_arbo_InFields(     /* Out: Params cr‚‚s */
  85.                                             int fnct );            /* In:  Fnct page arbo */
  86.     static    ARBO_TEXTPAR *    fix_arbo_PEcrans(     /* Out: Params cr‚‚s */
  87.                                         int fnct );            /* In:  Fnct page arbo */
  88.     static    ARBO_TEXTPAR * fix_arbo_databases( 
  89.                                         int fnct );
  90.     static    AFNCTSPEC    *afnct_spec( int fnct );
  91.     static    void    edit_in_liens( WIPARAMS *wi_params_adr );
  92.     static    int    Create_TextParPszList( 
  93.                             int edit_type, 
  94.                             ARBO_TEXTPAR *first_pecr_link, 
  95.                             char * * *textes );
  96.     static    int    Create_FieldPszList( 
  97.                             int type, 
  98.                             ARBO_FIELDPARS *first_field, 
  99.                             char * * *textes );
  100.     static    void    Delete_PszList(
  101.                             char * * Tpsz_List,    /* In: tableau de psz */
  102.                             int        nb_lines );    /* In: Nbre de lignes ds tableau */
  103.     static    char    *    Create_1OutFieldPsz( ARBO_FIELDPARS *field_params );
  104.     static    char    *    Create_1InFieldPsz( ARBO_FIELDPARS *field_params );
  105.     static    char    *    Create_1PathnamePsz( 
  106.                                 ARBO_TEXTPAR *    pTextPar,        /* In: param texte */
  107.                                 int                n_type );        /* In: Type de param */
  108.     static    void    edpgecr_callselect( LISTHANDLES *list_handles, int obj );
  109.     static    void    parapg_parasortie( LISTHANDLES *list_handles, OBJECT *arbre_fond, int call_obj );
  110.     static    void    parapg_parasaisie( LISTHANDLES *list_handles, OBJECT *arbre_fond, int call_obj );
  111.     static    void    parapg_paralist( 
  112.                             ARBO_LISTPARS    *    pArboListPars,    /* In: ParamŠtres … modifier */
  113.                             OBJECT             *    arbre_fond, 
  114.                             int                     call_obj );
  115.     static    void    replace_tmp_paramstring( char * *paramstring, char *new_content, int selection );
  116.     static    ARBO_FIELDPARS *    cree_OutFieldPars( 
  117.                                             OUTPUT_FPAR *    pOutputFPars );
  118.     static    ARBO_FIELDPARS *    cree_InFieldPars(                     /* Out: Liste cr‚e */
  119.                                             INPUT_FPAR *    pInputFPars );    /* In:  Tableau de valeurs par d‚faut */
  120.     static    void    DataPage_AutoParam(
  121.                     DATAPAGE    *    pDataPage );        /* In: Page concern‚e */
  122.  
  123.     /*
  124.      *    ParamŠtrages divers:
  125.      */
  126.     static     void    edit_arbopar_divers( int edit_type, WIPARAMS *wi_params_adr );
  127.     static    int    parpage_general( 
  128.                     PARPAGE_FLAGS * flags,
  129.                     GRECT *    start_box,         /* In: Rect de d‚part effet graphique */
  130.                     int    *    esc_objs,        /* In: Tableau des boutons … traiter en exit */
  131.                     char * * *path_array, 
  132.                     int nb_pecr_link );        /* In: Nbre de lignes dans le s‚lecteur */
  133.     static    int    parapage_actions( LISTHANDLES *list_handles, int    obj );
  134.     static    void    parpg_fixstate_act(                     /* Out: Rien */
  135.                             LISTHANDLES *list_handles );    /* In: Ptr sur infos sur la liste & le dialogue affich‚s */
  136.     /*
  137.      * Params sp‚cifiques:
  138.      */
  139.     static    void    edit_arbopar_params( 
  140.                             WIPARAMS *pWiParams );    /* In: Fen contenant le menu arbo depuis lequel on appelle */
  141.     /*
  142.      * Mots-clefs:
  143.      */
  144.     static    BOOL    ajoute_MotClef(                         /* Out: TRUE_1 si on a valid‚ */
  145.                             LISTHANDLES *    p_ListHandles,    /* In: Params de la liste des mots clefs */
  146.                             OBJECT         *    pForm_fond,     /* In: Formulaire qui a appel‚ */
  147.                             int                 n_callObj );    /* In: Obj aui a appell‚ sur ce formulaire */
  148.     static    BOOL    supprime_MotClef(                         /* Out: TRUE_1 si on a valid‚ */
  149.                             LISTHANDLES *    p_ListHandles );    /* In: Params de la liste des mots clefs */
  150.     static    void    fixe_MotClef( 
  151.                             LISTHANDLES *    p_ListHandles,
  152.                             BOOL                b_Command,        /* In: TRUE_1 si on traite une commande, sinon on triate un event */
  153.                             OBJECT         *    pForm_fond, 
  154.                             int                 n_callObj );
  155.     static    BOOL    edit_MotClef(                                                /* Out: TRUE_1 si valid‚ */
  156.                             KEYWORD_LIST  *    pDblText_paramsMotClef,        /* In:  Mot clef … ‚diter */
  157.                             BOOL                    b_MotClef,                        /* In:  TRUE si mot clef, sinon: event */
  158.                             OBJECT             *    pForm_fond, 
  159.                             int                     n_callObj );
  160.                             
  161.  
  162.  
  163. /*
  164.  * ------------------------ VARIABLES -------------------------
  165.  */
  166.  
  167. /*
  168.  * Internal variables: 
  169.  */
  170.     /* 
  171.      * Arbres: 
  172.      */
  173.     static    OBJECT *    M_arbosomm_adr;                /* Ptr sur boite pple d'une page arbo */
  174.     static    OBJECT *    M_pForm_EditInFields;        /* Ptr sur boite de params champ de saisie */
  175.     static    OBJECT *    M_pForm_EditOutFields;        /* Ptr sur boite de params champ de sortie */
  176.     static    OBJECT *    M_pForm_EditParamsLect;        /* Formulaire d'edition des Params lecture */
  177.     static    OBJECT *    M_pForm_EditArboKeyWords;    /* Ptr sur boite d'edition des mots clefs */
  178.     static    int        M_KeyWords_EscObjs[]={ EDLISTE, EDAPFIX, EDAPSPEC, EDAPADD, EDAPSUPP, ADAPVAL, EDAPANN, NIL };
  179.     static    OBJECT *    M_pForm_EditMotClef;            /* Ptr sur boite d'edition d'un mot-clef */
  180.     static    OBJECT *    M_pForm_EditListPars;        /* ParamŠtres d'affichage d'une liste */
  181.     static    OBJECT *    M_pForm_EditParFileSel;        /* Formulaire d'edition des Params FileSel */
  182.  
  183.     /*
  184.      * Params pages ‚cran par d‚faut:
  185.      */
  186. #include "FN_VDT.C"
  187.  
  188.     /*
  189.      * Params champs de SORTIE par d‚faut:
  190.      */
  191. #include "FN_OUTPT.C"
  192.  
  193.     /*
  194.      * Params champs de SAISIE par d‚faut:
  195.      */
  196. #include "FN_INPUT.C"
  197.  
  198.     /*
  199.      * Params Liens par d‚faut:
  200.      */
  201. #include "FN_LINKS.C"
  202.  
  203.     /*
  204.      * Params Bases de donn‚es:
  205.      */
  206. #include "FN_DBASE.C"
  207.  
  208.     /* 
  209.      * Variables servant lors du param‚trage d'une page arbo: 
  210.      */
  211.     static int                    M_edit_pecr_type;        /* Type d'‚dition: pages-ecran ou liens arbo */
  212.     static ARBO_TEXTPAR *    M_TextPar_copies;        /* Ptr sur Copies des paramŠtres des champs pdt la phase d'‚dition */
  213.     static ARBO_FIELDPARS *    M_fieldpar_copies;    /* Ptr sur Copies des paramŠtres des champs pdt la phase d'‚dition */
  214.     static ARBO_LISTPARS        M_ListPars_copy;        /* Copie des paramŠtres liste pour leur ‚dition */
  215.     /*
  216.      * Menus PopUps utilis‚s pour l'‚dition:
  217.      */
  218.     static POPUP_ENTRY        M_fill_menu[]=
  219.                 {                                            /* Popup de choix d'un fond */
  220.                     "  Espace vide",    ' ',
  221.                     "  Points",            '.',
  222.                     "  Tirets",            '-',
  223.                     "  Tirets bas",    '_',
  224.                     "  Transparent",    NIL,
  225.                     NULL,                    0xFFFF
  226.                 };
  227.     static POPUP_ENTRY    M_cach_menu[]=
  228.                 {                                            /* Popup de choix d'un CACHE */
  229.                     "  Sans cache",    NUL,
  230.                     "  Espace vide",    ' ',
  231.                     "  Points",            '.',
  232.                     "  Tirets",            '-',
  233.                     "  Tirets bas",    '_',
  234.                     "  Etoiles",        '*',
  235.                     "  Transparent",    NIL,
  236.                     NULL,                    0xFFFF
  237.                 };
  238.     static POPUP_ENTRY    M_color_menu[]=
  239.                 {                                            /* Popup de choix d'une couleur */
  240.                     "  #0 Noir",        MNOIR,
  241.                     "  #1 Bleu",        MBLEU,
  242.                     "  #2 Rouge",        MROUGE,
  243.                     "  #3 Magenta",    MMAGENTA,
  244.                     "  #4 Vert",        MVERT,
  245.                     "  #5 Cyan",        MCYAN,
  246.                     "  #6 Jaune",        MJAUNE,
  247.                     "  #7 Blanc",        MBLANC,
  248.                     NULL,                    0xFFFF
  249.                 };
  250.     static POPUP_ENTRY    M_Popup_FilterMenu[]=
  251.                 {                                            /* Popup de choix d'une couleur */
  252.                     "  Aucun",            FILTER_NONE,
  253.                     "  Num‚rique",        FILTER_NUMERIC,
  254.                     "  Nom sans SPC",    FILTER_NAME_NOSPC,
  255.                     "  Nom avec SPC",    FILTER_NAME_SPACE,
  256.                     "  UserName",        FILTER_USERNAME,
  257.                     "  Mot de Passe",    FILTER_PASSWORD,
  258.                     "  Adresse User",    FILTER_ADDRESS,
  259.                     "  No T‚l‚phone",    FILTER_PHONE,
  260.                     NULL,                    0xFFFF
  261.                 };
  262.  
  263.     /*
  264.      * Edition des mots clefs:
  265.      */
  266.     KEYWORD_LIST * M_pKeyWordList_Copy;        /* Copie de la liste de mots clefs en cours d'‚dition */
  267.  
  268.  
  269. /*
  270.  * ------------------------ FUNCTIONS -------------------------
  271.  */
  272.  
  273. /*
  274.  * init_arbo(-)
  275.  *
  276.  * Purpose:
  277.  * --------
  278.  * Init des pages arbo
  279.  *
  280.  * History:
  281.  * --------
  282.  * 1993: fplanque: Created
  283.  * 18.05.94: divis‚
  284.  * 07.11.94: params INFIELDs par d‚faut
  285.  * 16.11.94: init INFIELDs ecriture
  286.  * 03.12.94: NEW_ACCOUNT: pecran & infields
  287.  * 02.02.95: linkage des ic“nes du bureau vers arbosomm
  288.  */
  289. void    init_arbo( void )
  290. {
  291.     
  292.     TRACE0( "Initializing " THIS_FILE );
  293.     
  294.     /*
  295.      * Trouve adresses des arbres d'objets 
  296.      */
  297.     if (rsrc_gaddr( R_TREE, ARBOSOMM, &M_arbosomm_adr ) == 0)
  298.         erreur_rsrc();
  299.     /*
  300.      * Fixe les bitmaps d'ic“nes:
  301.      */
  302.     Icon_CopyICONIMGtoIBLK(    &(G_icon_images .datas),         M_arbosomm_adr[ ARBDATAS ] .ob_spec.iconblk );
  303.     Icon_CopyICONIMGtoIBLK(    &(G_icon_images .minitel),     M_arbosomm_adr[ PGESECRA ] .ob_spec.iconblk );
  304.     Icon_CopyICONIMGtoIBLK(    &(G_icon_images .affichages), M_arbosomm_adr[ AFFICHGS ] .ob_spec.iconblk );
  305.     Icon_CopyICONIMGtoIBLK(    &(G_icon_images .saisies),        M_arbosomm_adr[ SAISIES ]     .ob_spec.iconblk );
  306.     Icon_CopyICONIMGtoIBLK(    &(G_icon_images .params),        M_arbosomm_adr[ PARAMS ]     .ob_spec.iconblk );
  307.     Icon_CopyICONIMGtoIBLK(    &(G_icon_images .liens),         M_arbosomm_adr[ LIENSARB ] .ob_spec.iconblk );
  308.     Icon_CopyICONIMGtoIBLK(    &(G_icon_images .erreurs),     M_arbosomm_adr[ ERREURS ]     .ob_spec.iconblk );
  309.     Icon_CopyICONIMGtoIBLK(    &(G_icon_images .motsclef),    M_arbosomm_adr[ MOTSCLEF ] .ob_spec.iconblk );
  310.  
  311.     /*
  312.      * Fixe couleurs et positions d'ic“nes:
  313.      */
  314.     rsrc_color( M_arbosomm_adr );
  315.  
  316.     if (rsrc_gaddr( R_TREE, EDT_EDIT, &M_pForm_EditInFields ) == 0)
  317.         erreur_rsrc();
  318.     rsrc_color( M_pForm_EditInFields );        /* Fixe couleurs */
  319.  
  320.     if (rsrc_gaddr( R_TREE, EDT_AFFZ, &M_pForm_EditOutFields ) == 0)
  321.         erreur_rsrc();
  322.     rsrc_color( M_pForm_EditOutFields );        /* Fixe couleurs */
  323.  
  324.     if (rsrc_gaddr( R_TREE, EDTKEYWD, &M_pForm_EditArboKeyWords ) == 0)
  325.         erreur_rsrc();
  326.     rsrc_color( M_pForm_EditArboKeyWords );    /* Fixe couleurs */
  327.  
  328.     if (rsrc_gaddr( R_TREE, EDT_KEY, &M_pForm_EditMotClef ) == 0)
  329.         erreur_rsrc();
  330.     rsrc_color( M_pForm_EditMotClef );    /* Fixe couleurs */
  331.  
  332.     if (rsrc_gaddr( R_TREE, EDT_LIST, &M_pForm_EditListPars ) == 0)
  333.         erreur_rsrc();
  334.     rsrc_color( M_pForm_EditListPars );    /* Fixe couleurs */
  335.     
  336.     if (rsrc_gaddr( R_TREE, PARALECT, &M_pForm_EditParamsLect ) == 0)
  337.         erreur_rsrc();
  338.     rsrc_color( M_pForm_EditParamsLect );        /* Fixe couleurs */
  339.  
  340.     if (rsrc_gaddr( R_TREE, PARAFSEL, &M_pForm_EditParFileSel ) == 0)
  341.         erreur_rsrc();
  342.     rsrc_color( M_pForm_EditParFileSel );        /* Fixe couleurs */
  343.  
  344.  
  345.     /*
  346.      * ------------------------------
  347.      * Cr‚e modŠles de pages ‚cran:
  348.      * ------------------------------
  349.      */
  350.     M_std_pecran             = cree_textpars2( M_stdpecran );
  351.     M_lect_pecran             = cree_textpars2( M_lectpecran );
  352.     M_ecri_pecran             = cree_textpars2( M_ecripecran );
  353.     M_DispText_PEcrans    = cree_textpars2( M_DispText_PEcrDefs );
  354.     M_Id_pecran                 = cree_textpars2( M_IdPEcran );
  355.     M_NewAcc_pecran        = cree_textpars2( M_NewAccPEcran );
  356.     M_List_pecran             = cree_textpars2( M_ListPEcran );
  357.     M_Dir_pecran             = cree_textpars2( M_DirPEcran );
  358.     M_FileSel_PEcran        = cree_textpars2( M_FileSelPEcran );
  359.     M_DownLoad_PEcran        = cree_textpars2( M_DownLoadPEcran );
  360.  
  361.  
  362.     /*
  363.      * -----------------------------------
  364.      * Cr‚e modŠles de champs d'affichage:
  365.      * -----------------------------------
  366.      */
  367.     M_ecri_OutFields         = cree_OutFieldPars( M_Ecri_OutDefs );
  368.     M_lect_OutFields         = cree_OutFieldPars( M_Lect_OutDefs );
  369.     M_DispText_OutFields    = cree_OutFieldPars( M_DispText_OutDefs );
  370.     M_List_OutFields        = cree_OutFieldPars( M_List_OutDefs );
  371.     M_Dir_OutFields        = cree_OutFieldPars( M_Dir_OutDefs );
  372.     M_FileSel_OutFields  = cree_OutFieldPars( M_FileSel_OutDefs );
  373.     
  374.     /*
  375.      * ---------------------------------
  376.      * Cr‚e modŠles de champs de saisie:
  377.      * ---------------------------------
  378.      */
  379.     M_Std_InFields        = cree_InFieldPars( M_Std_InDefs );
  380.     M_Ecri_InFields    = cree_InFieldPars( M_Ecri_InDefs );
  381.     M_Id_InFields        = cree_InFieldPars( M_Id_InDefs );
  382.     M_NewAcc_InFields    = cree_InFieldPars( M_NewAcc_InDefs );
  383.  
  384.     /*
  385.      * -----------------------------
  386.      * Cr‚e modŠles de liens-arbo:
  387.      * -----------------------------
  388.      */
  389.     M_def_arbolinks  = CmdList_Create( M_stdlinks );
  390.     M_Ecri_Links       = CmdList_Create( M_Ecri_LinkDefs );
  391.     M_List_Links      = CmdList_Create( M_List_LinkDefs );
  392.     M_FileSel_Links  = CmdList_Create( M_FileSel_LinkDefs );
  393.     M_DownLoad_Links = CmdList_Create( M_DownLoad_LinkDefs );
  394.     
  395.     /*
  396.      * ---------------------------------
  397.      * Cr‚e modŠles de Bases de donn‚es:
  398.      * ---------------------------------
  399.      */
  400.     M_Ecri_DBs         = cree_textpars2( M_Ecri_DBDefs );
  401.     M_Lect_DBs         = cree_textpars2( M_Lect_DBDefs );
  402.     M_DispText_DBs    = cree_textpars2( M_DispText_DBDefs );
  403.     M_Id_DBs         = cree_textpars2( M_Id_DBDefs );
  404.  
  405. }
  406.    
  407.    
  408.   
  409.    
  410. /*
  411.  * ouverture_page_arbo(-)
  412.  *
  413.  * Purpose:
  414.  * --------
  415.  * Gestion du menu d'une page arbo
  416.  *
  417.  * History:
  418.  * --------
  419.  * 1993: fplanque: Created
  420.  */
  421. void    ouverture_page_arbo( 
  422.             WIPARAMS    *    selection_adr )
  423. {
  424.     /*
  425.      * Donn‚es concern‚es: 
  426.      */
  427.     int            selected_object =    selection_adr -> selected_icon;
  428.     DATADIR    *    curr_datadir     = selection_adr -> datadir;
  429.     OBJECT    *    obj = &((selection_adr -> draw_ptr.tree)[ selected_object ]);
  430.     int            ext_type = (obj -> ob_type ) >> 8;
  431.  
  432.     switch ( ext_type )
  433.     {
  434.         case FS_IN:
  435.         /* Element "IN": */
  436.             edit_in_liens( selection_adr );
  437.             break;
  438.  
  439.         default:
  440.         {    /*
  441.              * Page arbo: 
  442.              */
  443.             DATAGROUP    *    curr_datagroup = selection_adr -> datagroup;
  444.             char            *    data_name         = ((selection_adr -> draw_ptr.tree)[selected_object] .ob_spec.iconblk) -> ib_ptext;
  445.             DATAPAGE        *    curr_datapage     = page_adr_byname( curr_datadir, data_name ); 
  446.  
  447.             if( curr_datapage == NULL )
  448.             {    /* Si page non trouv‚e */
  449.                 signale("Page introuvable");
  450.             }
  451.             else
  452.             {
  453.                 /*    printf( data_name ); */
  454.                   ouvre_fenetre( CLASS_DATAPAGE, TYP_ARBO,
  455.                                     curr_datagroup, curr_datadir, curr_datapage,
  456.                                       " Page Arborescence " );
  457.             }
  458.         }
  459.     }
  460.  
  461. }
  462.  
  463.  
  464.  
  465. /*
  466.  * access_arbo(-)
  467.  *
  468.  * Purpose:
  469.  * --------
  470.  * Essaie d'acc‚der … un page arbo en m‚moire pour l'ouvrir
  471.  *
  472.  * History:
  473.  * --------
  474.  * 1993: fplanque: Created
  475.  * 06.08.94: extraction du code de controle du nbre de fenˆtre ouverte sur DATAPAGE (limite: 1)
  476.  */
  477. int    access_arbo( 
  478.             DATAPAGE *datapage, 
  479.             WORK_CONTENT *content_ptr )
  480. {
  481.     /*
  482.      * Fixe adr de la page courante! (qui contient celle de l'image:) 
  483.      */
  484.     content_ptr -> datapage = datapage;
  485.  
  486.     return    1;        /* On peut ouvrir */
  487. }
  488.  
  489.  
  490.  
  491.  
  492. /*
  493.  * open_arbosomm(-)
  494.  *
  495.  * Purpose:
  496.  * --------
  497.  *    Affichage du sommaire d'‚dition d'une page arbo
  498.  *
  499.  * History:
  500.  * --------
  501.  *     1993: fplanque: Created
  502.  * 17.05.94: fplanque: Ouvre la fenˆtre avec dimensions OPTIMALES
  503.  */
  504. void open_arbosomm( 
  505.             WIPARAMS *    pWiParams, 
  506.             DATAPAGE *    datapage )
  507. {
  508.     /*    
  509.      * Pointeurs: 
  510.      */
  511.     PAGEARBO        *    pagearbo = datapage -> data.pagearbo;
  512.     AFNCTSPEC    *    M_fnctarbo = pagearbo -> fnct_spec;
  513.     OBJECT         *    form_adr;
  514.     
  515.     /*
  516.      * Donne … la fenˆtre ses dimensions optimales:
  517.      */
  518.     wind_get( pWiParams -> handle, WF_FULLXYWH,  
  519.                     &(pWiParams -> curr_x), &(pWiParams -> curr_y), 
  520.                     &(pWiParams -> curr_w), &(pWiParams -> curr_h) );
  521.     wind_calc( WC_WORK, pWiParams -> wi_ckind,  
  522.                     pWiParams -> curr_x, pWiParams -> curr_y, 
  523.                     pWiParams -> curr_w, pWiParams -> curr_h,
  524.                     &(int)(pWiParams -> work_x), &(int)(pWiParams -> work_y), 
  525.                     &(int)(pWiParams -> seen_w), &(int)(pWiParams -> seen_h) );
  526.  
  527.     /*
  528.      * Duplique arbre d'objets: 
  529.      */
  530.     form_adr = formdup( M_arbosomm_adr );
  531.     /*
  532.      * Positionne arbre d'objets: 
  533.      */
  534.      form_adr[0].ob_x = pWiParams -> work_x +2;
  535.     form_adr[0].ob_y = pWiParams -> work_y +2;
  536.  
  537.     /*
  538.      * Fixe le nom de la page: 
  539.      */
  540.     rlink_teptext ( &form_adr[ NOMARBO ], pagearbo -> chemin );
  541.     /*
  542.      * Fixe la fonction de la page: 
  543.      */
  544.     rlink_teptext ( &form_adr[ FNCTARBO ], M_fnctarbo -> fnct_name );
  545.     /* 
  546.      * Fixe le commentaire de la page: 
  547.      */
  548.     if ( datapage -> comment != NULL )
  549.     {
  550.         rlink_teptext( &form_adr[ COMENTAR ], datapage -> comment );
  551.     }
  552.     else
  553.     {
  554.         dlink_teptext( &form_adr[ COMENTAR ], G_empty_string );
  555.     }
  556.     
  557.     /*
  558.      * Enable/Disable des ic“nes actives: 
  559.      */
  560.     objc_fixable( form_adr, PGESECRA,    YES1 );
  561.     objc_fixable( form_adr, AFFICHGS,    pagearbo -> output_fields !=NULL ? YES1 : NO0 );
  562.     objc_fixable( form_adr, SAISIES,        pagearbo -> fnct_no==FA_DOWNLOAD ? NO0 : YES1 );
  563.     objc_fixable( form_adr, ARBDATAS,    pagearbo -> databases!=NULL ? YES1 : NO0 );
  564.     objc_fixable( form_adr, ERREURS,        NO0  );
  565.     objc_fixable( form_adr, LIENSARB,    YES1 );
  566.     objc_fixable( form_adr, PARAMS,        pagearbo -> special_par.data!=NULL ? YES1 : NO0 );
  567.     objc_fixable( form_adr, MOTSCLEF,    pagearbo -> fnct_no==FA_DOWNLOAD ? NO0 : YES1 );
  568.     
  569.     /*
  570.      * Param‚trage de la fenˆtre: 
  571.      */
  572.     pWiParams -> content_ptr.datapage = datapage;        /* Pointeur sur contenu */
  573.     pWiParams -> draw_ptr.tree = form_adr;        /* Pointeur sur arbre d'objets */
  574.     pWiParams -> total_w            = form_adr[0] .ob_width +2*OUTLINE_INWIN;
  575.     pWiParams -> total_h            = form_adr[0] .ob_height +2*OUTLINE_INWIN;
  576.     pWiParams -> h_step            = 16;                /* Saut par 16 pix */
  577.     pWiParams -> v_step             = 16;                /* Saut par 16 pix */
  578.  
  579. }
  580.  
  581.  
  582.  
  583.  
  584. /*
  585.  * free_arbosomm(-)
  586.  *
  587.  * Purpose:
  588.  * --------
  589.  * LibŠre arbre d'objet ARBOSOMM de la m‚moire
  590.  *
  591.  * History:
  592.  * --------
  593.  *     1993: fplanque: Created
  594.  * 11.07.95: fplanque: Enlev‚ le free du nom qui ‚tait superflu (ce bug existait depuis TRES TRES longtemps!)
  595.  */
  596. void free_arbosomm( OBJECT *form_adr )
  597. {
  598.     /*
  599.      * Efface l'arbre (qui avait ‚t‚ dupliqu‚ lors de l'ouverture de la fenetre)
  600.      */
  601.     free_form( form_adr );
  602. }
  603.  
  604.  
  605.  
  606. /*
  607.  * edit_in_liens(-)
  608.  *
  609.  * Purpose:
  610.  * --------
  611.  * Edition des liens partant de l'objet "IN"
  612.  *
  613.  * History:
  614.  * --------
  615.  * 1993: fplanque: Created
  616.  * 04.12.94: ne gŠre plus qu'une seule liste de paramŠtres; fonctionne en utilisant une copie des params pour l'‚dition
  617.  * 17.12.94: signale que datagroup a ‚t‚ modifi‚
  618.  * 29.03.95: liens >-> evenements
  619.  */
  620. void edit_in_liens( 
  621.         WIPARAMS *pWiParams )
  622. {
  623.     DATADIR    *    datadir    = pWiParams -> datadir;    /* Dossier concern‚ */
  624.     DIRSPEC    *    dir_spec    = datadir -> dir_spec;            /* Sp‚cifications compl‚mentaires */    
  625.  
  626.     KEYWORD_LIST * p_1stEvent = dir_spec -> liens_in;    /* Ptr sur Liens … ‚diter */
  627.     int                nb_lignes;        /* Nbre de lignes de la liste */
  628.     char            **    textes;        /* textes des lignes */
  629.  
  630.     /* Var d'‚dition */
  631.     PARPAGE_FLAGS flags = { 0, 0, 0 };
  632.     GRECT            start_box;
  633.     int            modif;            /* A t'on modifi‚? */
  634.  
  635.     /*
  636.      * Fixe le nom de la page: 
  637.      */
  638.     rlink_teptext ( &M_pForm_EditArboKeyWords[ EDKEYPAG ], "." );        /* . signifie: dossier courant */
  639.     /*
  640.      * Fixe la fonction de la page: 
  641.      */
  642.     rlink_teptext ( &M_pForm_EditArboKeyWords[ EDKEYFNC ], "Entr‚e" );    /* Entr‚e dans le dossier courant */
  643.     /*
  644.      * Fixe le "titre" de la fenˆtre fille: 
  645.      */
  646.     dlink_teptext( &M_pForm_EditArboKeyWords[ EDKEYTIT ], " EvŠnements G‚n‚raux " );
  647.  
  648.     /* 
  649.      * Duplique les params: 
  650.      */
  651.     M_pKeyWordList_Copy = dup_KeyWordList( p_1stEvent );
  652.  
  653.     /* 
  654.      * Cr‚ation liste psz: 
  655.      */
  656.     nb_lignes = cree_liste_KeyWord( M_pKeyWordList_Copy, FALSE0, &textes );
  657.  
  658.     /*******************************************************************/
  659.  
  660.     objc_xywh ( pWiParams -> draw_ptr.tree, pWiParams -> selected_icon, &start_box );
  661.  
  662.     M_edit_pecr_type = EDIT_LIENS;            /* Var globale */
  663.  
  664.     modif = parpage_general( &flags, &start_box, M_KeyWords_EscObjs, &textes, nb_lignes );
  665.  
  666.     /*******************************************************************/
  667.  
  668.     /*
  669.      * Efface tableau de lignes de la m‚moire:
  670.      */
  671.     Delete_PszList( textes, nb_lignes );
  672.  
  673.     /*
  674.      * Teste  s'il faut sauver les modifs: 
  675.      */
  676.     if ( modif == YES1 )
  677.     {    /*
  678.          * Si on a valid‚: 
  679.          * Efface les anciennes donn‚es: 
  680.          */
  681.         free_KeyWordList( p_1stEvent );
  682.  
  683.         /*
  684.          * Lie la copie modifi‚e, donc les nouvelles donn‚es … la page arbo: 
  685.          */
  686.         dir_spec -> liens_in = M_pKeyWordList_Copy;
  687.  
  688.         /*
  689.          * Signale que le dossier ARBO a ‚t‚ modifi‚:
  690.          */
  691.         dataDir_setSavState( datadir, SSTATE_MODIFIED, TRUE_1 );
  692.     }
  693.     else
  694.     {    /*
  695.           * On a annul‚: 
  696.          * Efface la copie des donn‚es: 
  697.          */
  698.         free_KeyWordList( M_pKeyWordList_Copy );
  699.  
  700.     }
  701.  
  702.     /*
  703.      * On ne doit plus utiliser la copie: 
  704.      */
  705.     M_TextPar_copies = NULL;
  706.  
  707.     
  708. }
  709.  
  710.  
  711.  
  712. /*
  713.  * ouverture_menu_arbo(-)
  714.  *
  715.  * Purpose:
  716.  * --------
  717.  * Gestion d'un double clic sur une page arbo
  718.  *
  719.  * History:
  720.  * --------
  721.  * 1993: fplanque: Created
  722.  * 14.12.94: signale lorsque la page a ‚t‚ modifi‚e
  723.  * 04.01.94: les Dbases sont trait‚es comme les autres listes de params
  724.  * 22.03.95: correction petit bug sur COMMENTAR
  725.  */
  726. void    ouverture_menu_arbo( 
  727.             WIPARAMS    *    pWiParams )    /* In: fenˆtre menu arbo concern‚e */
  728. {
  729.  
  730.     switch( pWiParams -> selected_icon )
  731.     {
  732.         case    COMENTAR:
  733.         {
  734.             OBJECT    *    menu_tree = pWiParams -> draw_ptr.tree;
  735.             GRECT            start_box;
  736.             DATAPAGE    *    datapage = pWiParams -> datapage;
  737.                             
  738.             /*
  739.              * (1st func)D‚part de l'effet graphique: 
  740.              */
  741.             objc_xywh( menu_tree, pWiParams -> selected_icon, &start_box );
  742.  
  743.             /* 
  744.              * Edition du commentaire: 
  745.              */
  746.             if( edit_datapage_comment( datapage, &start_box ) )
  747.             {    /* 
  748.                  * Si on a modifi‚ le commentaire:
  749.                  * Fixe nouveau commentaire: 
  750.                  */
  751.                 if ( datapage -> comment != NULL )
  752.                 {
  753.                     rlink_teptext( &menu_tree[ COMENTAR ], datapage -> comment );
  754.                 }
  755.                 else
  756.                 {
  757.                     dlink_teptext( &menu_tree[ COMENTAR ], G_empty_string );
  758.                 }
  759.                 /*
  760.                  * Signale que la page a ‚t‚ modifi‚e:
  761.                  */
  762.                 dataPage_chgSavState( datapage, SSTATE_MODIFIED, TRUE_1, TRUE_1 );
  763.             }
  764.             break;
  765.         }
  766.         
  767.         case    PGESECRA:
  768.             edit_ArboParList( EDIT_PECRAN, pWiParams );
  769.             break;
  770.  
  771.         case    AFFICHGS:
  772.             edit_ArboParList( EDIT_OUTPUTS, pWiParams );
  773.             break;
  774.  
  775.         case    SAISIES:
  776.             edit_ArboParList( EDIT_SAISIES, pWiParams );
  777.             break;
  778.  
  779.         case    ARBDATAS:
  780.             edit_ArboParList( EDIT_DATA, pWiParams );
  781.             break;
  782.         
  783.         case    LIENSARB:
  784.             edit_ArboParList( EDIT_LIENS, pWiParams );
  785.             break;
  786.  
  787.         case    PARAMS:
  788.             edit_arbopar_params( pWiParams );
  789.             break;
  790.         
  791.         case    MOTSCLEF:
  792.             edit_ArboParList( EDIT_KEYWORDS, pWiParams );
  793.             break;
  794.             
  795.         default:
  796.             ping();
  797.  
  798.     }
  799. }
  800.  
  801.                       
  802.       
  803. /*
  804.  * Create_TextParPszList(-)
  805.  *
  806.  * Purpose:
  807.  * --------
  808.  * Cr‚ation des listes pour param‚trage des champs saisie/sortie
  809.  *
  810.  * History:
  811.  * --------
  812.  * 04.12.94: fplanque: Created based on cree_listes_champs()
  813.  */
  814. int Create_TextParPszList( 
  815.             int                     type, 
  816.             ARBO_TEXTPAR  *    pTextPar_First,     /* In: Ptr sur 1er champ de la liste chain‚e */
  817.             char             * * *    textes )
  818. {
  819.     /*
  820.      * Adresses pages ‚cran/liens: 
  821.      */
  822.     ARBO_TEXTPAR *    pTextPar_Curr;            /* Champ courant */
  823.     int                i;
  824.     int                nb_lignes = 0;            /* Pour l'instant: pas de ligne */
  825.     /*
  826.      * Variables n‚cessaires … la cr‚ation des lignes: 
  827.      */
  828.     char    * *    param_array;        /* Tableau contenant les params associ‚s */
  829.  
  830.     /*
  831.      * Compte pages: 
  832.      */
  833.     pTextPar_Curr = pTextPar_First;        /* 1er champ */
  834.     while( pTextPar_Curr != NULL )
  835.     {
  836.         nb_lignes ++;                        /* 1 ligne de plus */
  837.         pTextPar_Curr = pTextPar_Curr -> next;
  838.     }
  839.     /*    printf( "Nbre de lignes=%d \n", nb_lignes ); */
  840.  
  841.     /*
  842.      * Cr‚e zone de stockage du tableau qui
  843.      * va contenir les ptrs sur chaque ligne de la liste cr‚e: 
  844.      */
  845.     param_array = (char * *) MALLOC( sizeof( char* ) * nb_lignes );
  846.  
  847.     /*
  848.      * Boucle de remplissage du tableau-LISTE: 
  849.      */
  850.     pTextPar_Curr = pTextPar_First;        /* 1er champ */
  851.     for( i=0; i<nb_lignes; i++ )
  852.     {
  853.         /*
  854.          * Page ‚cran ou
  855.          * Lien arbo ou 
  856.          * Data (:: base de donn‚es ou texte ) :
  857.          */
  858.         param_array[ i ] = Create_1PathnamePsz( pTextPar_Curr, type );
  859.  
  860.         /*    printf( "Ligne: [%s]\n", param_array[ i ] ); */
  861.         
  862.         /*
  863.          * Page suivante: 
  864.          */
  865.         pTextPar_Curr = pTextPar_Curr -> next;
  866.     }
  867.  
  868.  
  869.     /*
  870.      * Valeurs en retour: 
  871.      */
  872.     *textes    = param_array;
  873.     
  874.     return    nb_lignes;
  875.  
  876. }
  877.       
  878.       
  879. /*
  880.  * Create_FieldPszList(-)
  881.  *
  882.  * Purpose:
  883.  * --------
  884.  * Cr‚ation des listes pour param‚trage des champs saisie/sortie
  885.  *
  886.  * History:
  887.  * --------
  888.  * 1993: fplanque: Created
  889.  * 04.12.94: Ne cr‚e plus qu'un seul tableau-LISTE
  890.  * 04.12.94: fplanque: renamed from cree_listes_champs()
  891.  */
  892. int Create_FieldPszList( 
  893.             int                     type, 
  894.             ARBO_FIELDPARS  *    first_field,     /* In: Ptr sur 1er champ de la liste chain‚e */
  895.             char             * * *    textes )
  896. {
  897.     /*
  898.      * Adresses pages ‚cran/liens: 
  899.      */
  900.     ARBO_FIELDPARS    *field_params;            /* Champ courant */
  901.     int                i;
  902.     int                nb_lignes = 0;            /* Pour l'instant: pas de ligne */
  903.     /*
  904.      * Variables n‚cessaires … la cr‚ation des lignes: 
  905.      */
  906.     char    * *    param_array;        /* Tableau contenant les params associ‚s */
  907.  
  908.     /*
  909.      * Compte pages: 
  910.      */
  911.     field_params = first_field;        /* 1er champ */
  912.     while( field_params != NULL )
  913.     {
  914.         nb_lignes ++;                        /* 1 ligne de plus */
  915.         field_params = field_params -> next;
  916.     }
  917.     /*    printf( "Nbre de lignes=%d \n", nb_lignes ); */
  918.  
  919.     /*
  920.      * Cr‚e zone de stockage du tableau qui
  921.      * va contenir les ptrs sur chaque ligne de la liste cr‚e: 
  922.      */
  923.     param_array = (char * *) MALLOC( sizeof( char* ) * nb_lignes );
  924.  
  925.     /*
  926.      * Boucle de remplissage du tableau-LISTE: 
  927.      */
  928.     field_params = first_field;        /* 1er champ */
  929.     for( i=0; i<nb_lignes; i++ )
  930.     {
  931.         if ( type == EDIT_OUTPUTS )
  932.         {    /*
  933.              * Champ de sortie: 
  934.              */
  935.             param_array[ i ] = Create_1OutFieldPsz( field_params );
  936.         }
  937.         else
  938.         {    /*
  939.              * Champ de saisie: 
  940.              */
  941.             param_array[ i ] = Create_1InFieldPsz( field_params );
  942.         }
  943.  
  944.         /*    printf( "Ligne: [%s]\n", param_array[ i ] ); */
  945.         
  946.         /*
  947.          * Page suivante: 
  948.          */
  949.         field_params = field_params -> next;
  950.     }
  951.  
  952.  
  953.     /*
  954.      * Valeurs en retour: 
  955.      */
  956.     *textes    = param_array;
  957.     
  958.     return    nb_lignes;
  959.  
  960. }
  961.    
  962.    
  963. /*
  964.  * Create_1PathnamePsz(-)
  965.  *
  966.  * Purpose:
  967.  * --------
  968.  * Cr‚e une ligne de liste pour un chemin d'accŠs
  969.  *
  970.  * History:
  971.  * --------
  972.  * 04.12.94: fplanque: Dervied from Create_1OutFieldPsz()
  973.  * 04.01.94: gŠre EDIT_DATA
  974.  * 05.01.94: ds EDIT_DATA fait la diff‚rence entre DB et TEXT
  975.  */
  976. char    *    Create_1PathnamePsz( 
  977.                 ARBO_TEXTPAR *    pTextPar,        /* In: param texte */
  978.                 int                n_type )            /* In: Type de param */
  979. {
  980.     const    char    *    cpsz_Fnct = G_empty_string;
  981.     const    char    *    cpsz_GroupName = G_empty_string;
  982.     char            *    pMsz_Ligne = (char *) MALLOC( 45 );        /* R‚serve zone pour string */
  983.  
  984.  
  985.     switch( n_type )
  986.     {
  987.         case    EDIT_PECRAN:
  988.             cpsz_Fnct = fnct_spec( M_fnctVdtInput, pTextPar -> fnct_no ) -> fnct_name,
  989.             cpsz_GroupName = find_datagroup_byType( DTYP_PAGES ) -> data_device;
  990.             break;
  991.  
  992.         case    EDIT_LIENS:
  993.             cpsz_Fnct = fnct_spec( G_fnctlink, pTextPar -> fnct_no ) -> fnct_name;
  994.             cpsz_GroupName = find_datagroup_byType( DTYP_ARBO ) -> data_device;
  995.             break;
  996.             
  997.         case    EDIT_DATA:
  998.             cpsz_Fnct = fnct_spec( M_fnctData, pTextPar -> fnct_no ) -> fnct_name;
  999.             if( pTextPar -> fnct_no < FT_FIRST )
  1000.             {    /*
  1001.                   * Il s'agit d'une fonction DB
  1002.                   */
  1003.                 cpsz_GroupName = find_datagroup_byType( DTYP_DATAS ) -> data_device;
  1004.                 break;
  1005.             }
  1006.             /*
  1007.              * Il s'agit d'une fonction TEXT
  1008.              */
  1009.              cpsz_GroupName = find_datagroup_byType( DTYP_TEXTS ) -> data_device;
  1010.             break;
  1011.             
  1012.         default:
  1013.             ping();
  1014.     }
  1015.  
  1016.  
  1017.     /*
  1018.      * Cr‚e une chaine r‚sumant les paramŠtres principaux 
  1019.      */
  1020.     if( pTextPar -> nom != NULL && pTextPar -> nom != G_empty_string )
  1021.     {
  1022.         sprintf( pMsz_Ligne, "%14s: %s\\%s",
  1023.                     cpsz_Fnct, cpsz_GroupName, pTextPar -> nom );
  1024.     }
  1025.     else
  1026.     {
  1027.         sprintf( pMsz_Ligne, "%14s: -", cpsz_Fnct );
  1028.     }
  1029.     
  1030.     
  1031.     /*
  1032.      * Retourne adresse de la chaine cr‚e: 
  1033.      */
  1034.     return    pMsz_Ligne;
  1035. }
  1036.  
  1037.    
  1038. /*
  1039.  * Create_1OutFieldPsz(-)
  1040.  *
  1041.  * Purpose:
  1042.  * --------
  1043.  * Cr‚e un champ de sortie dans liste
  1044.  *
  1045.  * History:
  1046.  * --------
  1047.  * 1993: fplanque: Created
  1048.  * 24.11.94: gestion enabled
  1049.  * 04.12.94: champ inclut sa fonction; changed name from cree_1output_liste
  1050.  */
  1051. char    *    Create_1OutFieldPsz( 
  1052.                 ARBO_FIELDPARS *field_params )
  1053. {
  1054.     char    *champ = (char *) MALLOC( 40 );        /* R‚serve zone pour string */
  1055.  
  1056.     /*
  1057.      * Cr‚e une chaine r‚sumant les paramŠtres principaux 
  1058.      */
  1059.     if( field_params -> data.output .OutFieldFlags .b_enabled )
  1060.     {
  1061.         sprintf( champ, "%14s: X=%03d Y=%03d L=%03d H=%03d\0",
  1062.                     fnct_spec( M_fnctsortie, field_params -> data.fnct_no ) -> fnct_name,
  1063.                     field_params -> data.output.x, field_params -> data.output.y,
  1064.                     field_params -> data.output.w, field_params -> data.output.h );
  1065.     }
  1066.     else
  1067.     {
  1068.         sprintf( champ, "%14s: D‚sactiv‚...",
  1069.                     fnct_spec( M_fnctsortie, field_params -> data.fnct_no ) -> fnct_name );
  1070.     }
  1071.     
  1072.     
  1073.     /*
  1074.      * Retourne adresse de la chaine cr‚e: 
  1075.      */
  1076.     return    champ;
  1077. }
  1078.  
  1079.  
  1080.  
  1081. /*
  1082.  * Delete_PszList(-)
  1083.  *
  1084.  * Efface tableau-liste de psz de la m‚moire
  1085.  *
  1086.  * History:
  1087.  * --------
  1088.  * 04.12.94: fplanque: Created
  1089.  */
  1090. void    Delete_PszList(
  1091.             char * * Tpsz_List,    /* In: tableau de psz */
  1092.             int        nb_lines )    /* In: Nbre de lignes ds tableau */
  1093. {
  1094.     int i;
  1095.  
  1096.     for( i=0; i<nb_lines; i++ )
  1097.     {    /* 
  1098.          * libŠre la m‚moire: 
  1099.          */
  1100.         free_String( Tpsz_List[ i ] );
  1101.     }
  1102.     
  1103.     /*
  1104.      * LibŠre le tableau lui mˆme:
  1105.      */
  1106.     FREE( Tpsz_List );     
  1107. }
  1108.  
  1109.  
  1110. /*
  1111.  * Create_1InFieldPsz(-)
  1112.  *
  1113.  * Purpose:
  1114.  * --------
  1115.  * Cree un champ de saisie de liste 
  1116.  *
  1117.  * Notes:
  1118.  * ------
  1119.  * format:
  1120.  * Fnct X=___ Y=___ W=___ H=___ X. #1 #7 
  1121.  *
  1122.  * History:
  1123.  * --------
  1124.  * 1993: fplanque: Created
  1125.  * 24.11.94: gestion enabled
  1126.  * 04.12.94: champ inclut sa fonction; changed name from cree_1champ_liste()
  1127.  */
  1128. char    *    Create_1InFieldPsz ( 
  1129.                 ARBO_FIELDPARS *field_params )
  1130. {
  1131.     char    *champ = (char *) MALLOC( 45 );        /* R‚serve zone pour string */
  1132.  
  1133.     if( field_params -> data.input .InFieldFlags .b_enabled )
  1134.     {
  1135.         char    car1    = 'T';                /* Exemple */
  1136.         char    car2    = 't';                /* Exemple */
  1137.         char    fill    = CEMPTY;            /* Remplissage */
  1138.         int    cache    = field_params -> data.input.asc_cach;    /* cache */
  1139.  
  1140.         /* Traitement du cache: */
  1141.         /* (sans cache <=> NUL) */
  1142.         if ( cache == NIL )
  1143.         {    /* Transparent */
  1144.             car1 = CEMPTY;
  1145.             car2 = CEMPTY;
  1146.         }
  1147.         else if ( cache >= ' ' )
  1148.         {    /* Il y a un cache */
  1149.             car1 = cache;
  1150.             car2 = cache;
  1151.         }
  1152.  
  1153.         /*
  1154.          * Traitement du fill 
  1155.          */
  1156.         if ( field_params -> data.input.asc_fill >= ' ' )
  1157.         {    /* S'il y a un caractŠre de support: */
  1158.             fill = field_params -> data.input.asc_fill;
  1159.         }
  1160.         
  1161.         /*
  1162.          * Cr‚e une chaine r‚sumant les paramŠtres principaux 
  1163.          */
  1164.         sprintf( champ, "%14s: X=%03d Y=%03d L=%03d H=%03d %c%c%c%c\0",
  1165.                     fnct_spec( M_fnctVdtInput, field_params -> data.fnct_no ) -> fnct_name,
  1166.                     field_params -> data.input.x, field_params -> data.input.y,
  1167.                     field_params -> data.input.w, field_params -> data.input.h,
  1168.                     car1, car2, fill, fill );
  1169.     }
  1170.     else
  1171.     {
  1172.         sprintf( champ, "%14s: D‚sactiv‚...",
  1173.                     fnct_spec( M_fnctVdtInput, field_params -> data.fnct_no ) -> fnct_name );
  1174.     }
  1175.  
  1176.     /*
  1177.      * Retourne adresse de la chaine cr‚e: 
  1178.      */
  1179.     return    champ;
  1180. }
  1181.  
  1182.  
  1183. /*
  1184.  * edpgecr_callselect(-)
  1185.  *
  1186.  * Purpose:
  1187.  * --------
  1188.  * Appel d'un s‚lecteur d'objet lors du traitement de params en liste
  1189.  *
  1190.  * History:
  1191.  * --------
  1192.  * 1993: fplanque: Created
  1193.  * 05.01.94: D‚termine la ligne concern‚e avec get_no_selitem()
  1194.  * 04.12.94: travaille d‚sormais sur une r‚elle copie des paramŠtres en m‚moire
  1195.  * 04.01.95: traite les EDIT_DATA
  1196.  * 05.01.94: dans EDIT_DATA, fait la diff‚rence entre DB et TEXT
  1197.  */
  1198. void    edpgecr_callselect( 
  1199.             LISTHANDLES *    list_handles, 
  1200.             int                 call_obj )
  1201. {
  1202.     char            *    sel_titre;        /* Titre que le s‚lecteur devra afficher */
  1203.     DATAGROUP    *    sel_datagr;        /* Datagroup dans lequel on va choisir une page */
  1204.     RAMSEL            selection;
  1205.     char            *    sel_page = NULL;    /* Va recevoir s‚lection */
  1206.     /*
  1207.      * Trouve les paramŠtres concern‚s:
  1208.      */
  1209.     int                concerned_line = get_no_selitem( list_handles );
  1210.     ARBO_TEXTPAR * pTextPar = Get_ithTextParInList( M_TextPar_copies, concerned_line );
  1211.     
  1212.     /*
  1213.      * Pointeur sur le DATAGROUP concern‚: 
  1214.      */
  1215.     switch( M_edit_pecr_type )
  1216.     {
  1217.         case    EDIT_PECRAN:
  1218.             /*
  1219.               * Si on veut s‚lectionner une page ‚cran: 
  1220.               */
  1221.             sel_titre = "S‚lection d'une Page Ecran:";
  1222.             sel_datagr = find_datagroup_byType( DTYP_PAGES );
  1223.             break;
  1224.  
  1225.         case    EDIT_LIENS:
  1226.             /*
  1227.               * Si on veut s‚lectionner une page ARBO: 
  1228.               */
  1229.             sel_titre = "S‚lection d'une Page Arbo:";
  1230.             sel_datagr = find_datagroup_byType( DTYP_ARBO );
  1231.             break;
  1232.             
  1233.         case    EDIT_DATA:
  1234.             /*
  1235.               * Si on veut s‚lectionner une donn‚e: 
  1236.               */
  1237.             if( pTextPar -> fnct_no < FT_FIRST )
  1238.             {    /*
  1239.                  * Il s'agit d'une DB:
  1240.                  */
  1241.                 sel_titre = "S‚lection d'une Base de Donn‚es:";
  1242.                 sel_datagr = find_datagroup_byType( DTYP_DATAS );
  1243.                 break;
  1244.             }
  1245.             /*
  1246.              * Il s'agit d'un TEXT:
  1247.              */
  1248.             sel_titre = "S‚lection d'un Texte:";
  1249.             sel_datagr = find_datagroup_byType( DTYP_TEXTS );
  1250.             break;
  1251.  
  1252.         default:
  1253.             ping();
  1254.     }
  1255.                     
  1256.     /*
  1257.      * S‚lecteur RAM: 
  1258.      */
  1259.     selection = ramselect_fromForm( sel_titre, sel_datagr, &sel_page,
  1260.                                     M_pForm_EditArboKeyWords, call_obj );
  1261.  
  1262.     if( selection != RAMSEL_ABORT )
  1263.     {    /*
  1264.          * On a valid‚: 
  1265.          * Tableau contenant les chemins d'accŠs 
  1266.          */
  1267.         char    * *path_array = *(list_handles -> pTpsz_array);
  1268.         char    * *resume = &path_array[ concerned_line ];
  1269.  
  1270.         /*
  1271.          * Remplace nom de la page ds param:
  1272.          */
  1273.         if( selection == RAMSEL_FILE )
  1274.         {    /*
  1275.              * Nouveau nom 
  1276.              */
  1277.             free_String( pTextPar -> nom );
  1278.             pTextPar -> nom = dup_String( &sel_page[5] );
  1279.         }
  1280.         else
  1281.         {    /*
  1282.              * Pas de nom s‚lectionn‚ 
  1283.              */
  1284.             free_String( pTextPar -> nom );
  1285.             pTextPar -> nom = NULL;
  1286.         }
  1287.          
  1288.     
  1289.         /*
  1290.          * LibŠre ancienne ligne:
  1291.          */
  1292.         free_String( *resume );
  1293.  
  1294.         /*
  1295.          * Cr‚e nouvelle ligne:
  1296.          */
  1297.         *resume = Create_1PathnamePsz( pTextPar, M_edit_pecr_type );
  1298.  
  1299.         /*
  1300.          * Modifie la ligne dans le formulaire: 
  1301.          */
  1302.         list_fix1name( M_pForm_EditArboKeyWords, list_handles -> selected_line, *resume );
  1303.  
  1304.     }
  1305. }
  1306.  
  1307.  
  1308. /*
  1309.  * Select_TermPosWithMouse(-)
  1310.  *
  1311.  * S‚lection d'un emplacement sur le Termial 
  1312.  * avec la souris de l'ordinateur
  1313.  *
  1314.  * Notes:
  1315.  * ------
  1316.  * -On considŠre que les op‚rations:
  1317.  *        wind_update( BEG_UPDATE );            
  1318.  *        wind_update( BEG_MCTRL );        
  1319.  *     ont d‚j… ‚t‚ effectu‚es et qu'on possŠde la souris en toute tranquilit‚
  1320.  *
  1321.  * -Suppose que le term … moins de caractŠres que l'‚cran n'a de pixels!
  1322.  *
  1323.  * History:
  1324.  * --------
  1325.  * 01.12.94: fplanque: Created
  1326.  */
  1327. void    Select_TermPosWithMouse( 
  1328.             OBJECT    *    pObj_FeedbackForm,    /* In: Formulaire de feedaback */
  1329.             int            n_IdxXField,            /* In: Onjet pour valeur X */
  1330.             int            n_IdxYField,             /* In: Objet pour valeur Y */
  1331.             int            n_XOrigin,                /* In: Point … consid‚rer comme l'origine */
  1332.             int            n_YOrigin )
  1333. {
  1334.     /* Taille terminal: */
  1335.     int    n_TermW = 40;
  1336.     int    n_TermH = 25;
  1337.     /* Taille Equivalente Ecran d'un caractŠre terminal */
  1338.     int    n_VirtualScreenCellW = G_n_ScreenW / n_TermW;
  1339.     int    n_VirtualScreenCellH = G_n_ScreenH / n_TermH;
  1340.     /* EvŠnement qui s'est d‚clench‚: */
  1341.     int    n_drag_evt;
  1342.     /* Coordonn‚es sur ‚cran: */
  1343.     int    n_ScreenX = 0;
  1344.     int    n_ScreenY = 0;
  1345.     /* Coordonn‚es su Minitel */
  1346.     int    n_TermX, n_TermY;
  1347.     /* Non utilis‚s */
  1348.     int    n_new_bstate, n_kbd_state, n_kbd_return, n_mouse_nbc;    
  1349.  
  1350.     char    Tsz_buf[ 10 ];
  1351.  
  1352.     /*
  1353.      * Forme souris: 
  1354.      */
  1355.     graf_mouse( POINT_HAND, NULL );    
  1356.  
  1357.     /*
  1358.      * Attend relachement du bouton souris:
  1359.      * Pas variment n‚cessaire
  1360.      * PAR CONTRE: on en profite pour r‚cup‚rer les coordonn‚es actuelles de la souris:
  1361.      */
  1362.     evnt_button( 0, 0x01, 0x00, 
  1363.                       &n_ScreenX, &n_ScreenY, &n_new_bstate, &n_kbd_state );
  1364.  
  1365.     /*
  1366.      * Allume curseur sur minitel:
  1367.      */
  1368.     csr_on( G_term_dev );
  1369.  
  1370.     /*
  1371.      * Boucle de mouvement: 
  1372.      */
  1373.     do
  1374.     {    
  1375.         /*
  1376.          * calcule ‚quivalent minitel des coordonn‚es de la souris:
  1377.          */
  1378.         n_TermX = n_ScreenX * n_TermW / G_n_ScreenW;
  1379.         n_TermY = n_ScreenY * n_TermH / G_n_ScreenH;
  1380.  
  1381.         /*
  1382.          * Positionne curseur sur minitel:
  1383.          */
  1384.         pos( G_term_dev, n_TermX + 1, n_TermY );
  1385.  
  1386.         /*
  1387.          * Feedback de la position ds forumulaire:
  1388.          */
  1389.         itoa( n_TermX-n_XOrigin +1, Tsz_buf, 10 );
  1390.         fix_ftext( pObj_FeedbackForm, n_IdxXField, Tsz_buf );
  1391.         objc_draw( pObj_FeedbackForm, n_IdxXField, 1, 
  1392.                             pObj_FeedbackForm -> ob_x,
  1393.                             pObj_FeedbackForm -> ob_y,
  1394.                             pObj_FeedbackForm -> ob_width,
  1395.                             pObj_FeedbackForm -> ob_height );
  1396.  
  1397.         itoa( n_TermY-n_YOrigin, Tsz_buf, 10 );
  1398.         fix_ftext( pObj_FeedbackForm, n_IdxYField, Tsz_buf );
  1399.         objc_draw( pObj_FeedbackForm, n_IdxYField, 1, 
  1400.                             pObj_FeedbackForm -> ob_x,
  1401.                             pObj_FeedbackForm -> ob_y,
  1402.                             pObj_FeedbackForm -> ob_width,
  1403.                             pObj_FeedbackForm -> ob_height );
  1404.  
  1405.         /*
  1406.          * Attend qu'il se passe qque chose: 
  1407.          */
  1408.         n_drag_evt = evnt_multi( MU_BUTTON | MU_M1,
  1409.                                 1, 0x01, 0x01,                                    /* Observe la pression du bouton gauche */
  1410.                         1, n_TermX * n_VirtualScreenCellW, n_TermY * n_VirtualScreenCellH, n_VirtualScreenCellW, n_VirtualScreenCellH,    /* Observe tout d‚placement de la souris */ 
  1411.                         0, 0, 0, 0, 0,
  1412.                         0L, 
  1413.                         0, 0,
  1414.                         &n_ScreenX, &n_ScreenY, &n_new_bstate,
  1415.                         &n_kbd_state, &n_kbd_return,
  1416.                         &n_mouse_nbc);
  1417.  
  1418.         /* ping(); */
  1419.         
  1420.     } while( n_drag_evt != MU_BUTTON );
  1421.  
  1422.     /*
  1423.      * Attend relachement du bouton souris:
  1424.      */
  1425.     evnt_button( 0, 0x01, 0x00, 
  1426.                       &n_ScreenX, &n_ScreenY, &n_new_bstate, &n_kbd_state );
  1427.  
  1428.  
  1429.     /*
  1430.      * Remet ds ‚tat normal:
  1431.      */
  1432.     csr_off( G_term_dev );
  1433.  
  1434.     graf_mouse( ARROW, NULL );    
  1435. }
  1436.  
  1437.  
  1438.  
  1439. /*
  1440.  * parapg_parasaisie(-)
  1441.  *
  1442.  * Purpose:
  1443.  * --------
  1444.  * ParamŠtres d'un champ de saisie
  1445.  *
  1446.  * History:
  1447.  * --------
  1448.  * 1993: fplanque: Created
  1449.  * 05.01.94: obtient no ligne concernee avec get_no_selitem()
  1450.  * 24.11.94: gestion enabled
  1451.  * 03.12.94: control ranges
  1452.  * 08.12.94: multiparagraph
  1453.  * 03.12.94: b_Mandatory
  1454.  * 16.12.94: nouveaux params
  1455.  * 12.01.95: flags reverse
  1456.  * 23.01.95: gestion du champ CodeChamp
  1457.  */
  1458. void    parapg_parasaisie( 
  1459.             LISTHANDLES *    list_handles, 
  1460.             OBJECT         *    arbre_fond, 
  1461.             int                 call_obj )
  1462. {
  1463.  
  1464.     /* 
  1465.      * Ligne/Champ concern‚: 
  1466.      */
  1467.     int        concerned_line = get_no_selitem( list_handles );
  1468.  
  1469.     ARBO_FIELDPARS    *    field_params = Get_ithEltInSingleLinkList( M_fieldpar_copies, concerned_line );
  1470.     FNCTSPEC            *    field_fnspec;        /* Sp‚cifications de la fnct du champ */
  1471.  
  1472.     /*
  1473.      * Objets: 
  1474.      */
  1475.     char    *    field_x = (M_pForm_EditInFields[ CHAMP_X ] .ob_spec.tedinfo) -> te_ptext;
  1476.     char    *    field_y = (M_pForm_EditInFields[ CHAMP_Y ] .ob_spec.tedinfo) -> te_ptext;
  1477.     char    *    field_w = (M_pForm_EditInFields[ CHAMP_L ] .ob_spec.tedinfo) -> te_ptext;
  1478.     char    *    field_h = (M_pForm_EditInFields[ CHAMP_H ] .ob_spec.tedinfo) -> te_ptext;
  1479.  
  1480.     /*
  1481.      * Variables: 
  1482.      */
  1483.     int    edit_obj = CHAMP_X;    /* Objet en cours d'‚dition */
  1484.     int    exit_obj;                /* Bouton Exit cliqu‚ */
  1485.     GRECT    start_box, form_box;
  1486.  
  1487.  
  1488.     INFIELD_FLAGS    InFieldFlags = field_params -> data.input .InFieldFlags;
  1489.     
  1490.     /*
  1491.      * Fixe les valeurs dans le formulaire: 
  1492.       * Enabled:
  1493.      */
  1494.     objc_fixsel( M_pForm_EditInFields, EN_EDIT, InFieldFlags.b_enabled );
  1495.  
  1496.     objc_fixsel( M_pForm_EditInFields, INVSUP, InFieldFlags.b_ReverseSupp );
  1497.     objc_fixsel( M_pForm_EditInFields, INVTEXT, InFieldFlags.b_ReverseText );
  1498.  
  1499.  
  1500.     /*
  1501.      * Nom du champ: 
  1502.      */
  1503.     field_fnspec = fnct_spec( M_fnctVdtInput, field_params -> data.fnct_no );
  1504.     M_pForm_EditInFields[ EDEDIT_C ] .ob_spec.free_string = field_fnspec -> fnct_name;
  1505.     /*
  1506.      * Emplacement: 
  1507.      */
  1508.     itoa( field_params -> data.input.x, field_x, 10 );    /* Conversion d‚cimale */
  1509.     itoa( field_params -> data.input.y, field_y, 10 );
  1510.     itoa( field_params -> data.input.w, field_w, 10 );
  1511.     itoa( field_params -> data.input.h, field_h, 10 );
  1512.     /*
  1513.      * ParamŠtres:
  1514.      */
  1515.     objc_fixsel( M_pForm_EditInFields, EDMULTIP, InFieldFlags .b_MultiParagraph );
  1516.     objc_fixsel( M_pForm_EditInFields, EDOBLIGA, InFieldFlags .b_Mandatory );
  1517.     objc_fixsel( M_pForm_EditInFields, EDAFFIMM, InFieldFlags .b_DisplayImm );
  1518.     objc_fixsel( M_pForm_EditInFields, EDAFFENT, InFieldFlags .b_DisplayEnt );
  1519.     objc_fixsel( M_pForm_EditInFields, EDAFFTJS, InFieldFlags .b_DisplayTjs );
  1520.     /*
  1521.      * Pop_ups: 
  1522.      */
  1523.     fix_popup_title( &M_pForm_EditInFields[ EDITSUP ], M_fill_menu,  field_params -> data.input.asc_fill );
  1524.     fix_popup_title( &M_pForm_EditInFields[ EDITCACH ], M_cach_menu, field_params -> data.input.asc_cach );
  1525.     fix_popup_title( &M_pForm_EditInFields[ COLSUP ],  M_color_menu, field_params -> data.input.col_fill );
  1526.     fix_popup_title( &M_pForm_EditInFields[ COLTEXT ], M_color_menu, field_params -> data.input.col_text );
  1527.     fix_popup_title( &M_pForm_EditInFields[ EDFILTER ], M_Popup_FilterMenu, field_params -> data.input.n_Filter );
  1528.  
  1529.     /*
  1530.      * Champs de saisie:
  1531.      */
  1532.     ltoa( field_params -> data.input .l_MaxNbLines, G_tmp_buffer, 10 );
  1533.     fix_ftext( M_pForm_EditInFields, EDMAXLIN, G_tmp_buffer );
  1534.     strncpy( G_tmp_buffer, (char*) &(field_params -> data.input .ul_CodeChamp), 4 );
  1535.     G_tmp_buffer[4]= '\0';
  1536.     fix_ftext( M_pForm_EditInFields, INFLCODE, G_tmp_buffer );
  1537.     fix_ftext( M_pForm_EditInFields, EDEFAULT, field_params -> data.input .psz_DefText );
  1538.     /*
  1539.      * Coord de d‚part du grow_box= 
  1540.      */
  1541.     objc_xywh( arbre_fond, call_obj, &start_box );
  1542.  
  1543.     /*
  1544.      * Gestion formulaire: 
  1545.      * vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
  1546.      */
  1547.     open_dialog( M_pForm_EditInFields, &start_box, &form_box );
  1548.  
  1549.     for( ; ; )
  1550.     {
  1551.         /*
  1552.          * Gestion form jusqu'… un clic sur objet exit:
  1553.          */
  1554.         exit_obj=ext_form_do( M_pForm_EditInFields, &edit_obj);    /* Gestion de la boŒte */
  1555.         /*    exit_obj &= 0x7FFF;        /* Masque bit 15 (Double-clic) */
  1556.         /*
  1557.          * Teste si on cherche … sortir: 
  1558.          */
  1559.         if ( exit_obj == EDEDTVAL  ||  exit_obj == EDEDTANN )
  1560.         {
  1561.             break;
  1562.         }
  1563.  
  1564.         /*
  1565.          * Traitement des autres boutons: 
  1566.          */
  1567.         switch( exit_obj )
  1568.         {
  1569.             case    POS_CHAM:
  1570.                 /*
  1571.                  * Positionnement Souris/Minitel:
  1572.                  */
  1573.                 Select_TermPosWithMouse( M_pForm_EditInFields, CHAMP_X, CHAMP_Y, 0, 0 );
  1574.                 objc_dsel( M_pForm_EditInFields, exit_obj );
  1575.                 break;
  1576.                 
  1577.             case    TAIL_CHA:
  1578.                 /*
  1579.                  * Positionnement Souris/Minitel:
  1580.                  */
  1581.                 Select_TermPosWithMouse( M_pForm_EditInFields, CHAMP_L, CHAMP_H, atoi( field_x )-1, atoi( field_y )-1 );
  1582.                 objc_dsel( M_pForm_EditInFields, exit_obj );
  1583.                 break;
  1584.                 
  1585.             case    EDITSUP:
  1586.             case    EDITCACH:
  1587.             case    COLSUP:
  1588.             case    COLTEXT:
  1589.             case    EDFILTER:
  1590.             {    /*
  1591.                   * S‚lection du motif de fond: 
  1592.                   */
  1593.                 int            selected;        /* Ligne s‚lectionn‚e */
  1594.                 POPUP_ENTRY    *entries;        /* Liste pour menu: */
  1595.                 
  1596.                 /* Fix Ptr sur liste appropri‚e: */
  1597.                 switch( exit_obj )
  1598.                 {
  1599.                     case    EDITSUP:
  1600.                         entries = M_fill_menu;
  1601.                         break;
  1602.                         
  1603.                     case    EDITCACH:
  1604.                         entries = M_cach_menu;
  1605.                         break;
  1606.                     
  1607.                     case    EDFILTER:
  1608.                         entries = M_Popup_FilterMenu;
  1609.                         break;
  1610.                         
  1611.                     default:
  1612.                         entries = M_color_menu;
  1613.                 }                                
  1614.                     
  1615.                 /*
  1616.                  * Appelle le Pop-Up: 
  1617.                  */
  1618.                 selected = popup_inform( M_pForm_EditInFields, exit_obj, exit_obj, entries,
  1619.                                  Popup_GetCurrVal( &M_pForm_EditInFields[ exit_obj ] ) );
  1620.                 if ( selected != ABORT_2 )
  1621.                 {
  1622.                     fix_popup_title( &M_pForm_EditInFields[ exit_obj ], entries, selected );
  1623.                     objc_draw( M_pForm_EditInFields, exit_obj, 1, form_box .g_x,
  1624.                            form_box .g_y, form_box .g_w, form_box .g_h );
  1625.                 }
  1626.                 break;
  1627.             }
  1628.             
  1629.             default:
  1630.                 ping();
  1631.         }
  1632.     
  1633.         graf_mouse( ARROW, 0);                    /* souris: FlŠche */
  1634.     }
  1635.  
  1636.     graf_mouse( BUSYBEE, 0);                /* souris: Abeille */
  1637.     close_dialog( M_pForm_EditInFields, exit_obj, &start_box, &form_box );
  1638.     /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
  1639.  
  1640.     /* D‚s‚lectionne bouton de sortie: */
  1641.     objc_clrsel( M_pForm_EditInFields, exit_obj );
  1642.  
  1643.     /* Red‚ssinne le fond: */
  1644.     objc_draw( arbre_fond, 0, 5, form_box .g_x, form_box .g_y, form_box .g_w, form_box .g_h );
  1645.  
  1646.     /*
  1647.      * Sauvegarde des valeurs ‚dit‚es: 
  1648.      */
  1649.     if ( exit_obj == EDEDTVAL )
  1650.     {    /*
  1651.          * Si on a confirm‚: 
  1652.          * Variables: 
  1653.          */
  1654.         char    * *path_array = *(list_handles -> pTpsz_array);
  1655.         char    * *resume = &path_array[ concerned_line ];    /* R‚sum‚ des paramŠtres */
  1656.  
  1657.         /*
  1658.          * Sauvegarde: 
  1659.          * Enabled:
  1660.          */
  1661.         InFieldFlags .b_enabled = objc_testsel( M_pForm_EditInFields, EN_EDIT );
  1662.         InFieldFlags .b_MultiParagraph = objc_testsel( M_pForm_EditInFields, EDMULTIP );
  1663.         InFieldFlags .b_Mandatory = objc_testsel( M_pForm_EditInFields, EDOBLIGA );
  1664.         InFieldFlags .b_DisplayImm = objc_testsel( M_pForm_EditInFields, EDAFFIMM );
  1665.         InFieldFlags .b_DisplayEnt = objc_testsel( M_pForm_EditInFields, EDAFFENT );
  1666.         InFieldFlags .b_DisplayTjs = objc_testsel( M_pForm_EditInFields, EDAFFTJS );
  1667.         InFieldFlags .b_ReverseSupp = objc_testsel( M_pForm_EditInFields, INVSUP );
  1668.         InFieldFlags .b_ReverseText = objc_testsel( M_pForm_EditInFields, INVTEXT );
  1669.         field_params -> data.input .InFieldFlags = InFieldFlags;
  1670.  
  1671.         /*
  1672.          * Emplacement: 
  1673.          */
  1674.         field_params -> data.input.x = ctrl_IntRange( atoi( field_x ), 1, 40 );
  1675.         field_params -> data.input.y = ctrl_IntRange( atoi( field_y ), 1, 24 );
  1676.         field_params -> data.input.w = ctrl_IntRange( atoi( field_w ), 1, 41 - field_params -> data.output.x );
  1677.         field_params -> data.input.h = ctrl_IntRange( atoi( field_h ), 1, 25 - field_params -> data.output.y );
  1678.         /*
  1679.          * Pop-Ups: 
  1680.          */
  1681.         field_params -> data.input.asc_fill = Popup_GetCurrVal( &M_pForm_EditInFields[ EDITSUP ]   );
  1682.         field_params -> data.input.asc_cach = Popup_GetCurrVal( &M_pForm_EditInFields[ EDITCACH ]  );
  1683.         field_params -> data.input.col_fill = Popup_GetCurrVal( &M_pForm_EditInFields[ COLSUP ]      );
  1684.         field_params -> data.input.col_text = Popup_GetCurrVal( &M_pForm_EditInFields[ COLTEXT ]   );
  1685.         field_params -> data.input.n_Filter = Popup_GetCurrVal( &M_pForm_EditInFields[ EDFILTER ]  );
  1686.         /*
  1687.          * Champs de saisie:
  1688.          */
  1689.         field_params -> data.input .l_MaxNbLines = atol( M_pForm_EditInFields[ EDMAXLIN ] .ob_spec.tedinfo -> te_ptext );
  1690.  
  1691.         free_String( field_params -> data.input .psz_DefText ); /* LibŠre ancien texte par d‚faut */
  1692.         field_params -> data.input .psz_DefText = extract_ftext( M_pForm_EditInFields, EDEFAULT );
  1693.  
  1694.         memset( &(field_params -> data.input .ul_CodeChamp), '\0', 4 );
  1695.         strncpy( (char *) &(field_params -> data.input .ul_CodeChamp), M_pForm_EditInFields[ INFLCODE ] .ob_spec.tedinfo -> te_ptext, 4 );
  1696.  
  1697.         /* 
  1698.          * Modifie la ligne dans le formulaire: 
  1699.          * Efface ancienne ligne: 
  1700.          */
  1701.         free_String( *resume );        /* LibŠre ancien contenu */
  1702.  
  1703.         /*
  1704.          * Cr‚e nouvelle ligne et place ptr dans tableau: 
  1705.          */
  1706.         *resume = Create_1InFieldPsz( field_params );
  1707.         
  1708.         /*
  1709.          * Fixe nlle ligne:
  1710.          */
  1711.         list_fix1name( M_pForm_EditArboKeyWords, list_handles -> selected_line, *resume );
  1712.  
  1713.     }
  1714.  
  1715. }
  1716.  
  1717.  
  1718.  
  1719.  
  1720.  
  1721. /*
  1722.  * parapg_parasortie(-)
  1723.  *
  1724.  * Purpose:
  1725.  * --------
  1726.  * ParamŠtres d'un champ de sortie/affichage
  1727.  *
  1728.  * History:
  1729.  * --------
  1730.  * 1993: fplanque: Created
  1731.  * 05.01.94: obtient no ligne concernee avec get_no_selitem()
  1732.  * 24.11.94: gestion enabled
  1733.  * 03.12.94: control ranges
  1734.  * 12.01.95: flags reverse
  1735.  * 13.01.95: flag CLEAR
  1736.  * 23.01.95: gestion du champ CodeChamp, GroupId
  1737.  * 25.03.95: gestion popup format date
  1738.  * 26.03.95: formats suppl‚mentaires
  1739.  */
  1740. void    parapg_parasortie( 
  1741.             LISTHANDLES *    list_handles, 
  1742.             OBJECT         *    arbre_fond, 
  1743.             int                 call_obj )
  1744. {
  1745.     /*
  1746.      * Ligne/Champ concern‚: 
  1747.      */
  1748.     int        concerned_line = get_no_selitem( list_handles );
  1749.     ARBO_FIELDPARS    *field_params = Get_ithEltInSingleLinkList( M_fieldpar_copies, concerned_line );
  1750.     FNCTSPEC    *field_fnspec;                /* Sp‚cifications de la fnct du champ */
  1751.  
  1752.     char    *    field_x = (M_pForm_EditOutFields[ AFFZ_X ] .ob_spec.tedinfo) -> te_ptext;
  1753.     char    *    field_y = (M_pForm_EditOutFields[ AFFZ_Y ] .ob_spec.tedinfo) -> te_ptext;
  1754.     char    *    field_w = (M_pForm_EditOutFields[ AFFZ_W ] .ob_spec.tedinfo) -> te_ptext;
  1755.     char    *    field_h = (M_pForm_EditOutFields[ AFFZ_H ] .ob_spec.tedinfo) -> te_ptext;
  1756.     char    *    pBsz_GroupID = (M_pForm_EditOutFields[ OUTGRPID ] .ob_spec.tedinfo) -> te_ptext;
  1757.     POPUP_ENTRY    * pPopUp;        /* Liste pour menu Format */
  1758.  
  1759.     int    edit_obj = AFFZ_X;    /* Objet en cours d'‚dition */
  1760.     int    exit_obj;                /* Bouton Exit cliqu‚ */
  1761.     GRECT    start_box, form_box;
  1762.  
  1763.     OUTFIELD_FLAGS    OutFieldFlags = field_params -> data.output .OutFieldFlags;
  1764.  
  1765.     /*
  1766.      * Fixe les valeurs dans le formulaire:
  1767.      * Enabled:
  1768.      */
  1769.     objc_fixsel( M_pForm_EditOutFields, EN_DISP,  OutFieldFlags.b_enabled );
  1770.     objc_fixsel( M_pForm_EditOutFields, AFFZINVT, OutFieldFlags.b_ReverseText );
  1771.     objc_fixsel( M_pForm_EditOutFields, AFFZINVI, OutFieldFlags.b_ReverseInfo );
  1772.     objc_fixsel( M_pForm_EditOutFields, AFFCLEAR, OutFieldFlags.b_Clear );
  1773.     /*
  1774.      * Nom du champ: 
  1775.      */
  1776.     field_fnspec = fnct_spec( M_fnctsortie, field_params -> data.fnct_no );
  1777.     M_pForm_EditOutFields[ AFFZ_FLD ] .ob_spec.free_string = field_fnspec -> fnct_name;
  1778.     /*
  1779.      * Pop_ups:
  1780.      * D‚termine d'abord quel menu format il faut utiliser:
  1781.      */
  1782.     switch( field_params -> data.fnct_no )
  1783.     {
  1784.         case    FO_RECNUMBER:
  1785.         case    FO_PAGENUMBER:
  1786.         case    FO_NBFILES:
  1787.             pPopUp = M_FmtNumber_menu;
  1788.             break;
  1789.  
  1790.         case    FO_CREATEDATE:
  1791.         case    FO_FILEDATE:
  1792.             pPopUp = M_FmtDate_menu;
  1793.             break;
  1794.  
  1795.         case    FO_FILESIZE:
  1796.             pPopUp = M_FmtFileSize_menu;
  1797.             break;
  1798.     
  1799.         default:
  1800.             pPopUp = M_Format_menu;
  1801.     }
  1802.     fix_popup_title( &M_pForm_EditOutFields[ AFFZTCOL ], M_color_menu, field_params -> data.output.col_text );
  1803.     fix_popup_title( &M_pForm_EditOutFields[ AFFZICOL ], M_color_menu, field_params -> data.output.col_info ); 
  1804.     fix_popup_title( &M_pForm_EditOutFields[ AFFZFMT ], pPopUp, field_params -> data.output.n_Format ); 
  1805.     /*
  1806.      * Emplacement: 
  1807.      */
  1808.     itoa( field_params -> data.output.x, field_x, 10 );    /* Conversion d‚cimale */
  1809.     itoa( field_params -> data.output.y, field_y, 10 );
  1810.     itoa( field_params -> data.output.w, field_w, 10 );
  1811.     itoa( field_params -> data.output.h, field_h, 10 );
  1812.     /*
  1813.      * Champs ‚ditables:
  1814.      */
  1815.     strncpy( G_tmp_buffer, (char*) &(field_params -> data.output .ul_CodeChamp), 4 );
  1816.     G_tmp_buffer[4]= '\0';
  1817.     fix_ftext( M_pForm_EditOutFields, OUTFCODE, G_tmp_buffer );
  1818.  
  1819.     itoa( OutFieldFlags.u_GroupId, pBsz_GroupID, 10 );
  1820.  
  1821.     /*
  1822.      * Coord de d‚part du grow_box:
  1823.      */
  1824.     objc_xywh( arbre_fond, call_obj, &start_box );
  1825.  
  1826.     /* Gestion formulaire: */
  1827.     /*vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/
  1828.     open_dialog( M_pForm_EditOutFields, &start_box, &form_box );
  1829.  
  1830.     for( ; ; )
  1831.     {    /* 
  1832.          * Gestion form jusqu'… un clic sur objet exit 
  1833.          */
  1834.         exit_obj=ext_form_do( M_pForm_EditOutFields, &edit_obj);    /* Gestion de la boŒte */
  1835.         /*    exit_obj &= 0x7FFF;        /* Masque bit 15 (Double-clic) */
  1836.  
  1837.         /* 
  1838.          * Teste si on cherche … sortir: 
  1839.          */
  1840.         if ( exit_obj == AFFZ_VAL  ||  exit_obj == AFFZ_ANN )
  1841.             break;
  1842.  
  1843.         /* 
  1844.          * Traitement des autres boutons: 
  1845.          */
  1846.         switch( exit_obj )
  1847.         {
  1848.             case    AFFZ_POS:
  1849.                 /*
  1850.                  * Positionnement Souris/Minitel:
  1851.                  */
  1852.                 Select_TermPosWithMouse( M_pForm_EditOutFields, AFFZ_X, AFFZ_Y, 0, 0 );
  1853.                 objc_dsel( M_pForm_EditOutFields, exit_obj );
  1854.                 break;
  1855.                 
  1856.             case    AFFZSIZE:
  1857.                 /*
  1858.                  * Positionnement Souris/Minitel:
  1859.                  */
  1860.                 Select_TermPosWithMouse( M_pForm_EditOutFields, AFFZ_W, AFFZ_H, atoi( field_x )-1, atoi( field_y )-1 );
  1861.                 objc_dsel( M_pForm_EditOutFields, exit_obj );
  1862.                 break;
  1863.                 
  1864.             case    AFFZTCOL:
  1865.             case    AFFZICOL:
  1866.             case    AFFZFMT:
  1867.             {    /* 
  1868.                  * S‚lection du motif de fond: 
  1869.                  */
  1870.                 int            selected;        /* Ligne s‚lectionn‚e */
  1871.                 POPUP_ENTRY    *entries;        /* Liste pour menu: */
  1872.                 
  1873.                 /* 
  1874.                  * Fix Ptr sur liste appropri‚e: 
  1875.                  */
  1876.                 if( exit_obj == AFFZFMT )
  1877.                 {
  1878.                     entries = pPopUp;
  1879.                 }
  1880.                 else
  1881.                 {
  1882.                     entries = M_color_menu;
  1883.                 }
  1884.                     
  1885.                 /*
  1886.                  * Appelle le Pop-Up: 
  1887.                  */
  1888.                 selected = popup_inform( M_pForm_EditOutFields, exit_obj, exit_obj, entries,
  1889.                                  Popup_GetCurrVal( &M_pForm_EditOutFields[ exit_obj ] ) );
  1890.                 if( selected != ABORT_2 )
  1891.                 {
  1892.                     fix_popup_title( &M_pForm_EditOutFields[ exit_obj ], entries, selected );
  1893.                     objc_draw( M_pForm_EditOutFields, exit_obj, 1, form_box .g_x,
  1894.                            form_box .g_y, form_box .g_w, form_box .g_h );
  1895.                 }
  1896.                 break;
  1897.             }
  1898.             
  1899.             default:
  1900.                 ping();
  1901.         }
  1902.         
  1903.         graf_mouse( ARROW, 0);                    /* souris: FlŠche */
  1904.     }
  1905.  
  1906.     graf_mouse( BUSYBEE, 0);                /* souris: Abeille */
  1907.     close_dialog( M_pForm_EditOutFields, exit_obj, &start_box, &form_box );
  1908.     /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
  1909.  
  1910.     /* D‚s‚lectionne bouton de sortie: */
  1911.     objc_clrsel( M_pForm_EditOutFields, exit_obj );
  1912.  
  1913.     /* Red‚ssinne le fond: */
  1914.     objc_draw( arbre_fond, 0, 5, form_box .g_x, form_box .g_y, form_box .g_w, form_box .g_h );
  1915.  
  1916.     /*
  1917.      * Sauvegarde des valeurs ‚dit‚es: 
  1918.      */
  1919.     if ( exit_obj == AFFZ_VAL )
  1920.     {    /*
  1921.          * Si on a confirm‚: 
  1922.          * Variables: 
  1923.          */
  1924.         char    * *path_array = *(list_handles -> pTpsz_array);
  1925.         char    * *resume = &path_array[ concerned_line ];    /* R‚sum‚ des paramŠtres */
  1926.  
  1927.         /* 
  1928.          * Sauvegarde: 
  1929.          * Enabled:
  1930.          */
  1931.         OutFieldFlags .b_enabled = objc_testsel( M_pForm_EditOutFields, EN_DISP );
  1932.         OutFieldFlags .b_ReverseText = objc_testsel( M_pForm_EditOutFields, AFFZINVT );
  1933.         OutFieldFlags .b_ReverseInfo = objc_testsel( M_pForm_EditOutFields, AFFZINVI );
  1934.         OutFieldFlags .b_Clear = objc_testsel( M_pForm_EditOutFields, AFFCLEAR );
  1935.         /*
  1936.          * Pop-Ups: 
  1937.          */
  1938.         field_params -> data.output.col_text = Popup_GetCurrVal( &M_pForm_EditOutFields[ AFFZTCOL ] );
  1939.         field_params -> data.output.col_info = Popup_GetCurrVal( &M_pForm_EditOutFields[ AFFZICOL ] );
  1940.         field_params -> data.output.n_Format = Popup_GetCurrVal( &M_pForm_EditOutFields[ AFFZFMT ] );
  1941.         /*
  1942.          * Emplacement: 
  1943.          */
  1944.         field_params -> data.output.x = ctrl_IntRange( atoi( field_x ), 1, 40);
  1945.         field_params -> data.output.y = ctrl_IntRange( atoi( field_y ), 1, 24);
  1946.         field_params -> data.output.w = ctrl_IntRange( atoi( field_w ), 1, 41 - field_params -> data.output.x );
  1947.         field_params -> data.output.h = ctrl_IntRange( atoi( field_h ), 1, 25 - field_params -> data.output.y );
  1948.         /*
  1949.          * Champs de saisie:
  1950.          */
  1951.         memset( &(field_params -> data.output .ul_CodeChamp), '\0', 4 );
  1952.         strncpy( (char *) &(field_params -> data.output .ul_CodeChamp), M_pForm_EditOutFields[ OUTFCODE ] .ob_spec.tedinfo -> te_ptext, 4 );
  1953.  
  1954.         OutFieldFlags.u_GroupId = ctrl_IntRange( atoi( pBsz_GroupID ), 0, 7);
  1955.  
  1956.  
  1957.         field_params -> data.output .OutFieldFlags = OutFieldFlags;
  1958.  
  1959.  
  1960.         /* 
  1961.          * Modifie la ligne dans le formulaire: 
  1962.          * Efface ancienne ligne: 
  1963.          */
  1964.         free_String( *resume );    
  1965.  
  1966.         /* 
  1967.          * Cr‚e nouvelle ligne et place ptr dans tableau: 
  1968.          */
  1969.         *resume = Create_1OutFieldPsz( field_params );
  1970.         
  1971.         /* 
  1972.          * Fixe nlle ligne:
  1973.          */
  1974.         list_fix1name( M_pForm_EditArboKeyWords, list_handles -> selected_line, *resume );
  1975.     }
  1976.  
  1977. }
  1978.  
  1979.  
  1980.  
  1981.  
  1982.  
  1983. /*
  1984.  * parapg_paralist(-)
  1985.  *
  1986.  * Purpose:
  1987.  * --------
  1988.  * ParamŠtrage d'une liste
  1989.  *
  1990.  * History:
  1991.  * --------
  1992.  * 26.01.95: fplanque: Created based on parapg_parasortie()
  1993.  */
  1994. void    parapg_paralist( 
  1995.             ARBO_LISTPARS    *    pArboListPars,    /* In: ParamŠtres … modifier */
  1996.             OBJECT             *    arbre_fond, 
  1997.             int                     call_obj )
  1998. {
  1999.     /*
  2000.      * Objets: 
  2001.      */
  2002.     char    *    field_nbl = (M_pForm_EditListPars[ LISTNBL ] .ob_spec.tedinfo) -> te_ptext;
  2003.     char    *    field_nbc = (M_pForm_EditListPars[ LISTNBC ] .ob_spec.tedinfo) -> te_ptext;
  2004.     char    *    field_intl = (M_pForm_EditListPars[ LISTINTL ] .ob_spec.tedinfo) -> te_ptext;
  2005.     char    *    field_intc = (M_pForm_EditListPars[ LISTINTC ] .ob_spec.tedinfo) -> te_ptext;
  2006.  
  2007.     int    edit_obj = LISTNBL;    /* Objet en cours d'‚dition */
  2008.     int    exit_obj;                /* Bouton Exit cliqu‚ */
  2009.     GRECT    start_box, form_box;
  2010.  
  2011.     /*
  2012.      * Fixe les valeurs dans le formulaire:
  2013.      */
  2014.     itoa( pArboListPars -> nb_Lines, field_nbl, 10 );    /* Conversion d‚cimale */
  2015.     itoa( pArboListPars -> nb_Cols, field_nbc, 10 );
  2016.     itoa( pArboListPars -> n_InterLine, field_intl, 10 );
  2017.     itoa( pArboListPars -> n_InterCol, field_intc, 10 );
  2018.  
  2019.     /*
  2020.      * Coord de d‚part du grow_box:
  2021.      */
  2022.     objc_xywh( arbre_fond, call_obj, &start_box );
  2023.  
  2024.     /*
  2025.      * Gestion formulaire: 
  2026.      *vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
  2027.      */
  2028.     open_dialog( M_pForm_EditListPars, &start_box, &form_box );
  2029.  
  2030.     for( ; ; )
  2031.     {    /* 
  2032.          * Gestion form jusqu'… un clic sur objet exit 
  2033.          */
  2034.         exit_obj=ext_form_do( M_pForm_EditListPars, &edit_obj);    /* Gestion de la boŒte */
  2035.         /*    exit_obj &= 0x7FFF;        /* Masque bit 15 (Double-clic) */
  2036.  
  2037.         /* 
  2038.          * Teste si on cherche … sortir: 
  2039.          */
  2040.         if( exit_obj == LISTVAL || exit_obj == LISTANNU )
  2041.         {
  2042.             break;
  2043.         }
  2044.         
  2045.         graf_mouse( ARROW, 0);                    /* souris: FlŠche */
  2046.     }
  2047.  
  2048.     graf_mouse( BUSYBEE, 0);                /* souris: Abeille */
  2049.     close_dialog( M_pForm_EditListPars, exit_obj, &start_box, &form_box );
  2050.     /*
  2051.      *^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  2052.      */
  2053.  
  2054.     /*
  2055.      * D‚s‚lectionne bouton de sortie: 
  2056.      */
  2057.     objc_clrsel( M_pForm_EditListPars, exit_obj );
  2058.  
  2059.     /*
  2060.      * Red‚ssinne le fond: 
  2061.      */
  2062.     objc_draw( arbre_fond, 0, 5, form_box .g_x, form_box .g_y, form_box .g_w, form_box .g_h );
  2063.  
  2064.     /*
  2065.      * Sauvegarde des valeurs ‚dit‚es: 
  2066.      */
  2067.     if( exit_obj == LISTVAL )
  2068.     {    /*
  2069.          * Si on a confirm‚: 
  2070.          */
  2071.         pArboListPars -> nb_Lines        = ctrl_IntRange( atoi( field_nbl ), 1, 24);
  2072.         pArboListPars -> nb_Cols        = ctrl_IntRange( atoi( field_nbc ), 1, 40);
  2073.         pArboListPars -> n_InterLine = ctrl_IntRange( atoi( field_intl ), 1, 24);
  2074.         pArboListPars -> n_InterCol    = ctrl_IntRange( atoi( field_intc ), 1, 40);
  2075.     }
  2076.  
  2077. }
  2078.  
  2079.  
  2080.  
  2081. /*
  2082.  * replace_tmp_paramstring(-)
  2083.  *
  2084.  * Purpose:
  2085.  * --------
  2086.  * Remplace chaine de stockage temporaire d'un paramŠtre
  2087.  *
  2088.  * History:
  2089.  * --------
  2090.  * 1993: fplanque: Created
  2091.  * 24.05.94: utilisation de free_String()
  2092.  */
  2093. void    replace_tmp_paramstring( char * *paramstring, char *new_content, int selection )
  2094. {
  2095.     if ( selection == RAMSEL_FILE )
  2096.     {    /* Nouveau nom */
  2097.         free_String( *paramstring );                /* LibŠre ancien nom */
  2098.  
  2099.         *paramstring = STRDUP( new_content );    /* Cr‚e nouveau nom */
  2100.     }
  2101.     else
  2102.     {
  2103.         free_String( *paramstring );                /* LibŠre ancien nom */
  2104.         *paramstring = G_empty_string;            /* Ptr sur chaine vide */
  2105.     }
  2106. }
  2107.  
  2108.  
  2109.  
  2110. /*
  2111.  * cree_textpars(-)
  2112.  *
  2113.  * Purpose:
  2114.  * --------
  2115.  * Cr‚e liste de params texte
  2116.  * (utilis‚ pour cr‚ation des listes par d‚faut)
  2117.  *
  2118.  * History:
  2119.  * --------
  2120.  * 29.08.94: fplanque: Created
  2121.  */
  2122. ARBO_TEXTPAR *    cree_textpars( 
  2123.                         int *item_list )
  2124. {
  2125.     ARBO_TEXTPAR    *textpar_list;            /* Ptr sur 1er ‚l‚ment de la liste */
  2126.     ARBO_TEXTPAR    * *pred_next = &(textpar_list);    /* Adresse o— on va devoir stocker le d‚but de la liste */
  2127.     ARBO_TEXTPAR    *textpar;                /* Ptr sur 1 ‚l‚ment de la liste */
  2128.     int                fnct_no;
  2129.  
  2130.     while(    fnct_no = *(item_list++),
  2131.                 fnct_no != NIL  )
  2132.     {
  2133.         textpar = ( ARBO_TEXTPAR * ) MALLOC( sizeof( ARBO_TEXTPAR ) );
  2134.         textpar -> fnct_no = fnct_no;
  2135.         textpar -> nom = NULL;
  2136.         *pred_next = textpar;
  2137.         pred_next = &(textpar -> next);    /* Sauve adresse du nouveau parametre */
  2138.     }
  2139.     *pred_next = NULL;        /* Le dernier lien n'a pas de suivant */
  2140.  
  2141.     return    textpar_list;
  2142. }
  2143.  
  2144.  
  2145.  
  2146.  
  2147. /*
  2148.  * cree_textpars(-)
  2149.  *
  2150.  * Purpose:
  2151.  * --------
  2152.  * Cr‚e liste de params texte
  2153.  * (utilis‚ pour cr‚ation des listes par d‚faut)
  2154.  *
  2155.  * History:
  2156.  * --------
  2157.  * 29.08.94: fplanque: Created
  2158.  * 19.01.95: prend tableau de ARBO_TEXTPAR en argument
  2159.  */
  2160. ARBO_TEXTPAR *    cree_textpars2( 
  2161.                         ARBO_TEXTPAR * TTextPar_Origin )    /* In: Tableau de valeurs par d‚faut */
  2162. {
  2163.     ARBO_TEXTPAR    *    textpar_list;            /* Ptr sur 1er ‚l‚ment de la liste */
  2164.     ARBO_TEXTPAR     **    pred_next = &(textpar_list);    /* Adresse o— on va devoir stocker le d‚but de la liste */
  2165.     ARBO_TEXTPAR    *    textpar;                /* Ptr sur 1 ‚l‚ment de la liste */
  2166.     int                i;
  2167.  
  2168.     for( i=0; TTextPar_Origin[i] .fnct_no != NIL; i++ )
  2169.     {
  2170.         textpar = ( ARBO_TEXTPAR * ) MALLOC( sizeof( ARBO_TEXTPAR ) );
  2171.         textpar -> fnct_no = TTextPar_Origin[i] .fnct_no;
  2172.         textpar -> nom = dup_String( TTextPar_Origin[i] .nom );
  2173.         *pred_next = textpar;
  2174.         pred_next = &(textpar -> next);    /* Sauve adresse du nouveau parametre */
  2175.     }
  2176.     *pred_next = NULL;        /* Le dernier lien n'a pas de suivant */
  2177.  
  2178.     return    textpar_list;
  2179. }
  2180.  
  2181.  
  2182. /*
  2183.  * cree_OutFieldPars(-)
  2184.  *
  2185.  * Purpose:
  2186.  * --------
  2187.  * Cr‚e liste de params sur champs de sortie
  2188.  * (utilis‚ pour cr‚ation des listes par d‚faut)
  2189.  *
  2190.  * History:
  2191.  * --------
  2192.  * 29.08.94: fplanque: Created
  2193.  */
  2194. ARBO_FIELDPARS *    cree_OutFieldPars( 
  2195.                             OUTPUT_FPAR *    pOutputFPars )
  2196. {
  2197.     int                fnct_no;
  2198.     ARBO_FIELDPARS *    pFieldPars_list;            /* Ptr sur 1er ‚l‚ment de la liste */
  2199.     ARBO_FIELDPARS    **    pred_next = &(pFieldPars_list);    /* Adresse o— on va devoir stocker le d‚but de la liste */
  2200.     ARBO_FIELDPARS    *    pFieldPars;                    /* Ptr sur 1 ‚l‚ment de la liste */
  2201.  
  2202.     while(    fnct_no = pOutputFPars -> fnct_no,
  2203.                 fnct_no != NIL  )
  2204.     {
  2205.         pFieldPars = ( ARBO_FIELDPARS * ) MALLOC( sizeof( void* ) + sizeof( OUTPUT_FPAR ) );
  2206.         /*
  2207.          * Fixe params par d‚faut:
  2208.          */
  2209.         pFieldPars -> data.output = *pOutputFPars;
  2210.  
  2211.         *pred_next = pFieldPars;
  2212.  
  2213.         pred_next = &(pFieldPars -> next);    
  2214.  
  2215.         pOutputFPars ++;
  2216.     }
  2217.     *pred_next = NULL;        /* Le dernier lien n'a pas de suivant */
  2218.  
  2219.     return    pFieldPars_list;
  2220. }
  2221.  
  2222.  
  2223. /*
  2224.  * cree_InFieldPars(-)
  2225.  *
  2226.  * Purpose:
  2227.  * --------
  2228.  * Cr‚e liste de params sur champs de SAISIE
  2229.  * (utilis‚ pour cr‚ation des listes par d‚faut)
  2230.  *
  2231.  * History:
  2232.  * --------
  2233.  * 29.08.94: fplanque: Created
  2234.  */
  2235. ARBO_FIELDPARS *    cree_InFieldPars(                     /* Out: Liste cr‚e */
  2236.                             INPUT_FPAR *    pInputFPars )    /* In:  Tableau de valeurs par d‚faut */
  2237. {
  2238.     int                    fnct_no;
  2239.     ARBO_FIELDPARS *    pFieldPars_list;            /* Ptr sur 1er ‚l‚ment de la liste */
  2240.     ARBO_FIELDPARS    **    pred_next = &(pFieldPars_list);    /* Adresse o— on va devoir stocker le d‚but de la liste */
  2241.     ARBO_FIELDPARS    *    pFieldPars;                    /* Ptr sur 1 ‚l‚ment de la liste */
  2242.  
  2243.     while(    fnct_no = pInputFPars -> fnct_no,
  2244.                 fnct_no != NIL  )
  2245.     {
  2246.         pFieldPars = ( ARBO_FIELDPARS * ) MALLOC( sizeof( void* ) + sizeof( INPUT_FPAR ) );
  2247.         /*
  2248.          * Fixe params par d‚faut:
  2249.          */
  2250.         pFieldPars -> data.input = *pInputFPars;
  2251.  
  2252.         *pred_next = pFieldPars;
  2253.  
  2254.         pred_next = &(pFieldPars -> next);    
  2255.  
  2256.         pInputFPars ++;
  2257.     }
  2258.     *pred_next = NULL;        /* Le dernier lien n'a pas de suivant */
  2259.  
  2260.     return    pFieldPars_list;
  2261. }
  2262.  
  2263.  
  2264.  
  2265. /*
  2266.  * DataPage_AutoParam(-)
  2267.  *
  2268.  * Purpose:
  2269.  * --------
  2270.  * AutoParam‚trage d'une page arbo
  2271.  *
  2272.  * History:
  2273.  * --------
  2274.  * 17.12.94: fplanque: Created
  2275.  * 11.07.95: fplanque: ne paramŠtre la page de fond QUE s'il n'y a pas de val par d‚faut
  2276.  */
  2277. void    DataPage_AutoParam(
  2278.             DATAPAGE    *    pDataPage )        /* In: Page concern‚e */
  2279. {
  2280.     PAGEARBO      *    pPageArbo = pDataPage -> data.pagearbo;
  2281.     ARBO_TEXTPAR *    pTextPar_Found;
  2282.  
  2283.     /*
  2284.      * Cherche parametre 'page ‚cran de fond':
  2285.      */
  2286.     pTextPar_Found = Lookup_SingleLinkList( pPageArbo -> pages_ecran, FE_FOND );
  2287.     if( pTextPar_Found != NULL )
  2288.     {    /*
  2289.          * On a trouv‚ la param page de fond:
  2290.          */
  2291.         if( pTextPar_Found -> nom == NULL )
  2292.         {    /*
  2293.              * S'il n'est pas encore assign‚:
  2294.              * On lui assigne le nom de cette page ARBO suivi de .VDT
  2295.              */
  2296.             strcpy( G_tmp_buffer, pDataPage -> nom );
  2297.             replace_extensionInBuf( G_tmp_buffer, ".VDT" );
  2298.             pTextPar_Found -> nom = STRDUP( G_tmp_buffer );
  2299.         }
  2300.     }
  2301.  
  2302. }
  2303.  
  2304.  
  2305. /*
  2306.  * cree_pagearbo(-)
  2307.  *
  2308.  * Purpose:
  2309.  * --------
  2310.  * Cr‚ation d'une nouvelle page arbo
  2311.  *
  2312.  * Notes:
  2313.  * ------
  2314.  **********************************************
  2315.  * ATTENTION: Tous les sous groupes cr‚‚s ici
  2316.  * doivent ‚galement ˆtre trait‚s par
  2317.  * dataPg_resetdata(), load_pagesarbo() et save_arbo()
  2318.  **********************************************
  2319.  *
  2320.  * History:
  2321.  * --------
  2322.  * 1993: fplanque: Created
  2323.  * 10.05.94: fplanque: Ajout‚ ttmt ParamŠtres Sp‚cifiques Page Arbo
  2324.  * 06.08.94: vir‚ param DATAGROUP et cr‚ation de la DATAPAGE par appel a fonction
  2325.  * 29.08.94: cr‚ation des champs de sortie par proc‚dure sp‚cialis‚e
  2326.  * 07.11.94: Prise en compte pages FA_ID; Plis de listes par d‚faut
  2327.  * 16.11.94: champs saisie sp‚ciaux pour ecri
  2328.  * 03.12.94: page NEW_ACCOUNT
  2329.  * 17.12.94: ne met plus le flag modified! (on le mettra plus tard, avec update d'icone au passage)
  2330.  * 17.12.94: autoparam
  2331.  * 04.01.94: gestion FA_DISP_TEXT
  2332.  * 26.01.95: gestion des params de liste
  2333.  * 27.03.95: params filesel
  2334.  * 29.03.95: liens-in >>> evenements
  2335.  */
  2336. DATAPAGE    *    cree_pagearbo( 
  2337.                     DATADIR    *    curr_datadir, 
  2338.                     int             fnct, 
  2339.                     char        *    form_name, 
  2340.                     int             pos_x, 
  2341.                     int             pos_y )
  2342. {
  2343.     PAGEARBO    *    pagearbo = MALLOC( sizeof( PAGEARBO ) );
  2344.     DATAPAGE    *    datapage;
  2345.  
  2346.     /*
  2347.      * -----------------
  2348.      * Fixe pages-‚cran:
  2349.      * -----------------
  2350.      */
  2351.     pagearbo -> pages_ecran = fix_arbo_PEcrans( fnct );
  2352.  
  2353.     /*
  2354.      * ---------------------------------------------
  2355.      * Fixe paramŠtres champs d'affichage/de sortie: 
  2356.      * ---------------------------------------------
  2357.      */
  2358.     pagearbo -> output_fields = fix_arbo_OutFields( fnct );
  2359.     /*
  2360.      * -------------------------
  2361.      * Fixe paramŠtres de liste: 
  2362.      * -------------------------
  2363.      */
  2364.     pagearbo -> pArboListPars = fix_arbo_ListPars( fnct );
  2365.  
  2366.     /*
  2367.      * -----------------------------------
  2368.      * Fixe paramŠtres champs de saisie:
  2369.      * -----------------------------------
  2370.      */
  2371.     pagearbo -> input_fields = fix_arbo_InFields( fnct );
  2372.  
  2373.     /*
  2374.      * --------------------------------------------
  2375.      * Fixe paramŠtres bases de donn‚es concern‚es:
  2376.      * --------------------------------------------
  2377.      */
  2378.     pagearbo -> databases = fix_arbo_databases( fnct );
  2379.  
  2380.     /*
  2381.      * ----------------
  2382.      * Fixe liens arbo: 
  2383.      * ----------------
  2384.      */
  2385.     switch ( fnct )
  2386.     {
  2387.         case    FA_ECRI_MSG:
  2388.         case    FA_ID:
  2389.         case    FA_NEW_ACCOUNT:
  2390.             pagearbo -> p_Events = dup_KeyWordList( M_Ecri_Links );
  2391.             break;
  2392.         
  2393.         case    FA_LIST:
  2394.             pagearbo -> p_Events = dup_KeyWordList( M_List_Links );
  2395.             break;
  2396.             
  2397.         case    FA_FILESEL:
  2398.             pagearbo -> p_Events = dup_KeyWordList( M_FileSel_Links );
  2399.             break;
  2400.             
  2401.         case    FA_DOWNLOAD:
  2402.             pagearbo -> p_Events = dup_KeyWordList( M_DownLoad_Links );
  2403.             break;
  2404.  
  2405.         default:
  2406.             pagearbo -> p_Events = dup_KeyWordList( M_def_arbolinks );
  2407.     }
  2408.     
  2409.     
  2410.     /*
  2411.      * --------------------------------------------
  2412.      * Fixe paramŠtres sp‚cifiques au type de page:
  2413.      * --------------------------------------------
  2414.      */
  2415.     switch ( fnct )
  2416.     {
  2417.         case    FA_LECT_MSG:
  2418.             pagearbo -> special_par.lecture = (LECTURE_PAR*) MALLOC( sizeof( LECTURE_PAR ) );
  2419.             /*
  2420.              * Par d‚faut: un appui sur annulation n'efface pas le message
  2421.              * courant:
  2422.              */
  2423.             pagearbo -> special_par.lecture -> n_Annule_Efface = NO0;
  2424.             break;
  2425.  
  2426.         case    FA_FILESEL:
  2427.             pagearbo -> special_par.filesel = MALLOC( sizeof(FILESEL_PAR) );
  2428.             /*
  2429.              * Params par d‚faut:
  2430.              */
  2431.             pagearbo -> special_par.filesel -> pMsz_RootPath = STRDUP( "C:\\" );
  2432.             pagearbo -> special_par.filesel -> n_flags = FA_SUBDIR;
  2433.             break;
  2434.             
  2435.         /* case    FA_MENU: */
  2436.         /* case    FA_ECRI_MSG: */
  2437.         /* case    FA_ID: */
  2438.         /* case    FA_DISP_TEXT: */
  2439.         default:
  2440.             pagearbo -> special_par.data = NULL;
  2441.     }
  2442.  
  2443.     /*
  2444.      * --------------------------
  2445.      * Fixe paramŠtres mots clef:
  2446.      * --------------------------
  2447.      */
  2448.     pagearbo -> p_MotsClefs = NULL;
  2449.  
  2450.     
  2451.     /*
  2452.      *----------------------
  2453.      * Fixe infos page Arbo:
  2454.      *----------------------
  2455.      */
  2456.     pagearbo -> fnct_no = fnct;                        /* Fonction de la page */
  2457.     /*
  2458.      * Donn‚es non sauvegard‚es: 
  2459.      * Cr‚e le chemin d'accŠs complet … la page :
  2460.      */
  2461.     pagearbo -> chemin     = page_fullpath( curr_datadir, form_name );
  2462.     /* 
  2463.      * Sp‚cifs associ‚es … la fonction:
  2464.      */
  2465.     pagearbo    -> fnct_spec = afnct_spec( fnct );    
  2466.  
  2467.     pagearbo -> map_pos_x    = pos_x;            /* Coordonn‚es dans le tableau */
  2468.     pagearbo -> map_pos_y    = pos_y;            /* repr‚sentatif */
  2469.  
  2470.  
  2471.     /*
  2472.      * --------------------
  2473.      * Fixe infos DATAPAGE:
  2474.      * --------------------
  2475.      */
  2476.     datapage = create_std_datapage( DTYP_ARBO, form_name );
  2477.  
  2478.     /* 
  2479.      * Lie les infos ARBO aux infos PAGE standard: 
  2480.      */
  2481.     datapage -> data.pagearbo = pagearbo;
  2482.  
  2483.     /* 
  2484.      * Lie la nlle page aux pr‚c‚dentes: 
  2485.      */
  2486.     attach_new_data( curr_datadir, datapage );
  2487.  
  2488.  
  2489.     /*
  2490.      * Autoparametrage:
  2491.      */
  2492.     DataPage_AutoParam( datapage );
  2493.  
  2494.     return    datapage;
  2495. }
  2496.  
  2497.  
  2498. /*
  2499.  * fix_arbo_PEcrans(-)
  2500.  *
  2501.  * Purpose:
  2502.  * --------
  2503.  * Cr‚ation des params pages ‚crans
  2504.  * lors de la cr‚ation d'1 pg arbo
  2505.  *
  2506.  * History:
  2507.  * --------
  2508.  * 04.01.94: fplanque: Extracted
  2509.  */
  2510. ARBO_TEXTPAR *    fix_arbo_PEcrans(     /* Out: Params cr‚‚s */
  2511.                         int fnct )            /* In:  Fnct page arbo */
  2512. {
  2513.     ARBO_TEXTPAR    *    p_TextPars;
  2514.  
  2515.     switch ( fnct )
  2516.     {
  2517.         case    FA_ECRI_MSG:
  2518.             p_TextPars = M_ecri_pecran;
  2519.             break;
  2520.         
  2521.         case    FA_LECT_MSG:
  2522.             p_TextPars = M_lect_pecran;
  2523.             break;
  2524.         
  2525.         case    FA_DISP_TEXT:
  2526.             p_TextPars = M_DispText_PEcrans;
  2527.             break;
  2528.         
  2529.         case    FA_ID:
  2530.             p_TextPars = M_Id_pecran;
  2531.             break;
  2532.  
  2533.         case    FA_LIST:
  2534.             p_TextPars = M_List_pecran;
  2535.             break;
  2536.  
  2537.         case    FA_DIRECTORY:
  2538.             p_TextPars = M_Dir_pecran;
  2539.             break;
  2540.             
  2541.         case    FA_FILESEL:
  2542.             p_TextPars = M_FileSel_PEcran;
  2543.             break;
  2544.  
  2545.         case    FA_DOWNLOAD:
  2546.             p_TextPars = M_DownLoad_PEcran;
  2547.             break;
  2548.             
  2549.         /* case    FA_MENU: */
  2550.         default:
  2551.             p_TextPars = M_std_pecran;
  2552.     }
  2553.  
  2554.     return    Duplicate_TextParList( p_TextPars );
  2555. }
  2556.  
  2557.  
  2558. /*
  2559.  * fix_arbo_OutFields(-)
  2560.  *
  2561.  * Purpose:
  2562.  * --------
  2563.  * Cr‚ation des params champs d'affichage
  2564.  * lors de la cr‚ation d'1 pg arbo
  2565.  *
  2566.  * History:
  2567.  * --------
  2568.  * 24.01.95: fplanque: Created
  2569.  */
  2570. ARBO_FIELDPARS *    fix_arbo_OutFields(     /* Out: Params cr‚‚s */
  2571.                             int fnct )            /* In:  Fnct page arbo */
  2572. {
  2573.     ARBO_FIELDPARS    *    p_FieldPars;
  2574.  
  2575.     switch ( fnct )
  2576.     {
  2577.         case    FA_ECRI_MSG:
  2578.             p_FieldPars = M_ecri_OutFields;
  2579.             break;
  2580.         
  2581.         case    FA_LECT_MSG:
  2582.             p_FieldPars = M_lect_OutFields;
  2583.             break;
  2584.             
  2585.         case    FA_DISP_TEXT:
  2586.             p_FieldPars = M_DispText_OutFields;
  2587.             break;
  2588.  
  2589.         case    FA_LIST:
  2590.             p_FieldPars = M_List_OutFields;
  2591.             break;
  2592.  
  2593.         case    FA_DIRECTORY:
  2594.             p_FieldPars = M_Dir_OutFields;
  2595.             break;
  2596.             
  2597.         case    FA_FILESEL:
  2598.             p_FieldPars = M_FileSel_OutFields;
  2599.             break;
  2600.             
  2601.         /* case    FA_MENU: */
  2602.         /* case    FA_ID: */
  2603.         default:
  2604.             p_FieldPars = NULL;                /* Pas de champ de sortie */
  2605.     }
  2606.  
  2607.     return Duplicate_SingleLinkList( p_FieldPars, sizeof( void * ) +sizeof( OUTPUT_FPAR ) );
  2608.  
  2609. }
  2610.  
  2611.  
  2612.  
  2613. /*
  2614.  * fix_arbo_ListPars(-)
  2615.  *
  2616.  * Purpose:
  2617.  * --------
  2618.  * Cr‚ation des params liste d'affichage
  2619.  * lors de la cr‚ation d'1 pg arbo
  2620.  *
  2621.  * History:
  2622.  * --------
  2623.  * 26.01.95: fplanque: Created
  2624.  */
  2625. ARBO_LISTPARS *    fix_arbo_ListPars(     /* Out: Params cr‚‚s */
  2626.                             int fnct )            /* In:  Fnct page arbo */
  2627. {
  2628.     ARBO_LISTPARS    *    pArboListPars;    
  2629.  
  2630.     switch ( fnct )
  2631.     {
  2632.         case    FA_LIST:
  2633.         case    FA_DIRECTORY:
  2634.             pArboListPars = MALLOC( sizeof( ARBO_LISTPARS ) );
  2635.             *pArboListPars = M_AListPars_Def;
  2636.             break;
  2637.  
  2638.         case    FA_FILESEL:
  2639.             pArboListPars = MALLOC( sizeof( ARBO_LISTPARS ) );
  2640.             *pArboListPars = M_AListPars_FSelDef;
  2641.             break;
  2642.  
  2643.         default:
  2644.             pArboListPars = NULL;                /* Pas de liste */
  2645.     }
  2646.  
  2647.     return    pArboListPars;
  2648. }
  2649.  
  2650.  
  2651. /*
  2652.  * fix_arbo_InFields(-)
  2653.  *
  2654.  * Purpose:
  2655.  * --------
  2656.  * Cr‚ation des params champs de saisie
  2657.  * lors de la cr‚ation d'1 pg arbo
  2658.  *
  2659.  * History:
  2660.  * --------
  2661.  * 24.01.95: fplanque: Created
  2662.  */
  2663. ARBO_FIELDPARS *    fix_arbo_InFields(     /* Out: Params cr‚‚s */
  2664.                             int fnct )            /* In:  Fnct page arbo */
  2665. {
  2666.     ARBO_FIELDPARS    *    p_FieldPars;
  2667.  
  2668.     switch ( fnct )
  2669.     {
  2670.         case    FA_ECRI_MSG:
  2671.             p_FieldPars = M_Ecri_InFields;
  2672.             break;
  2673.         
  2674.         case    FA_ID:
  2675.             p_FieldPars = M_Id_InFields;
  2676.             break;
  2677.             
  2678.         case    FA_NEW_ACCOUNT:
  2679.             p_FieldPars = M_NewAcc_InFields;
  2680.             break;
  2681.             
  2682.         case    FA_DOWNLOAD:
  2683.             p_FieldPars = NULL;
  2684.             break;
  2685.             
  2686.         /* case    FA_MENU: */
  2687.         /* case    FA_LECT_MSG: */
  2688.         /* case    FA_DISP_TEXT: */
  2689.         /* case    FA_LIST: */
  2690.         /* case    FA_DIRECTORY: */
  2691.         default:
  2692.             p_FieldPars = M_Std_InFields;
  2693.     }
  2694.  
  2695.     return    Duplicate_SingleLinkList( p_FieldPars, sizeof( void * ) +sizeof( INPUT_FPAR ) );
  2696.  
  2697. }
  2698.  
  2699.  
  2700. /*
  2701.  * fix_arbo_databases(-)
  2702.  *
  2703.  * Purpose:
  2704.  * --------
  2705.  * Cr‚ation des params bases de donn‚es
  2706.  * lors de la cr‚ation d'1 pg arbo
  2707.  *
  2708.  * History:
  2709.  * --------
  2710.  * 1993: fplanque: Created
  2711.  * 03.12.94: cr‚ation bases pour ID et NEW_ACCOUNT; insertion de noms par d‚faut!
  2712.  */
  2713. ARBO_TEXTPAR *    fix_arbo_databases( 
  2714.                         int fnct )
  2715. {
  2716.     ARBO_TEXTPAR    *    pTextPar_DBs;
  2717.  
  2718.     /*
  2719.      * ------------------
  2720.      * Fixe pages-‚cran 
  2721.      * ------------------
  2722.      */
  2723.     switch ( fnct )
  2724.     {
  2725.         case    FA_ECRI_MSG:
  2726.             pTextPar_DBs = M_Ecri_DBs;
  2727.             break;
  2728.         
  2729.         case    FA_LECT_MSG:
  2730.         case    FA_LIST:
  2731.             pTextPar_DBs = M_Lect_DBs;
  2732.             break;
  2733.         
  2734.         case    FA_DISP_TEXT:
  2735.             pTextPar_DBs = M_DispText_DBs;
  2736.             break;
  2737.         
  2738.         case    FA_ID:
  2739.         case    FA_NEW_ACCOUNT:
  2740.         case    FA_DIRECTORY:
  2741.             pTextPar_DBs = M_Id_DBs;
  2742.             break;
  2743.             
  2744.         /* case    FA_MENU: */
  2745.         default:
  2746.             pTextPar_DBs = NULL;
  2747.     }
  2748.  
  2749.     return    Duplicate_TextParList( pTextPar_DBs );
  2750. }
  2751.  
  2752.  
  2753. /*
  2754.  * arboedit_optimal(-)
  2755.  *
  2756.  * Purpose:
  2757.  * --------
  2758.  * Appele lors de la creation d'une fenetre
  2759.  * contenant une boite d'edition de page arbo.
  2760.  *
  2761.  * History:
  2762.  * --------
  2763.  * 1993: fplanque: Created
  2764.  */
  2765. void    arboedit_optimal( int wi_ckind, int *border_x, int *border_y, int *border_w, int *border_h)
  2766. {
  2767.     int    work_x, work_y, work_w, work_h;    /* Coordonn‚es zone de travail */
  2768.     int    wx_mini, wy_mini, ww_maxi, wh_maxi; /* Dimensions maximales */
  2769.     int    wx_maxi, wy_maxi;                        /* Limites sup‚rieures */
  2770.  
  2771.     /*
  2772.      * Essaye de centrer (par AES) la boŒte sur l'‚cran: 
  2773.      */
  2774.     form_center( M_arbosomm_adr, &work_x, &work_y, &work_w, &work_h );
  2775.     work_x ++;
  2776.     work_y ++;
  2777.     work_w -= 2;                            /* EnlŠve bordure ext‚rieure */
  2778.     work_h -= 2;
  2779.  
  2780.     /*
  2781.      * Calcule la taille max que peut occuper la boŒte: 
  2782.      */
  2783.     wind_calc( WC_WORK, wi_ckind, G_x_mini, G_y_mini, G_w_maxi, G_h_maxi,
  2784.                     &wx_mini, &wy_mini, &ww_maxi, &wh_maxi );
  2785.  
  2786.     /*
  2787.      * Contr“le l'inclusion: 
  2788.      */
  2789.     if ( work_w > ww_maxi ) /* Si trop large */
  2790.     {
  2791.         work_w = ww_maxi;
  2792.     }
  2793.     wx_maxi = wx_mini + ww_maxi;        /* Limite X sup‚rieure */
  2794.     if ( (work_x + work_w) > wx_maxi )     /* Si on d‚passe */
  2795.     {
  2796.         work_x = wx_maxi - work_w;
  2797.     }
  2798.     else if ( work_x < wx_mini )
  2799.     {
  2800.         work_x = wx_mini;
  2801.     }
  2802.  
  2803.     if ( work_h > wh_maxi )
  2804.     {    /* Si trop haut */
  2805.         work_h = wh_maxi;
  2806.     }
  2807.     wy_maxi = wy_mini + wh_maxi;        /* Limite Y sup‚rieure */
  2808.  
  2809.     if ( (work_y + work_h) > wy_maxi )
  2810.     {    /* Si on d‚passe */
  2811.         work_y = wy_maxi - work_h;
  2812.     }
  2813.     else if ( work_y < wy_mini )
  2814.     {
  2815.         work_y = wy_mini;
  2816.     }
  2817.  
  2818.     /*
  2819.      * Calcule les coordonn‚es totales de la fenˆtre: 
  2820.      */
  2821.     wind_calc( WC_BORDER, wi_ckind, work_x, work_y, work_w, work_h,
  2822.                     border_x, border_y, border_w, border_h );
  2823.  
  2824. }
  2825.  
  2826.  
  2827. /*
  2828.  * -------------- EDITION DE PARAMS DIVERS D'UNE PAGE ARBO --------------
  2829.  */
  2830.  
  2831.                       
  2832. /*
  2833.  * edit_ArboParList(-)
  2834.  *
  2835.  * Purpose:
  2836.  * --------
  2837.  * Edition de paramŠtres d'une page arbo sous forme de liste
  2838.  * (Pages Ecran, Champs de saisie, Liens arbo, etc...)    
  2839.  *
  2840.  * History:
  2841.  * --------
  2842.  * 1993: fplanque: Created
  2843.  * 04.12.94: ne gere plus qu'une seule liste
  2844.  * 14.12.94: signale que la page arbo a ‚t‚ modifi‚e
  2845.  * 04.01.95: gŠre les DATAs
  2846.  * 24.03.95: gestion de liste our toute page qui en disposerait
  2847.  * 29.03.95: liens >-> evenements
  2848.  */
  2849. void edit_ArboParList(                /* Ne renvoie rien */
  2850.             int            edit_type, 
  2851.             WIPARAMS *    pWiParams )
  2852. {
  2853.     DATAPAGE        *    datapage = pWiParams -> datapage;        /* Page ARBO concern‚e */
  2854.     PAGEARBO        *    pPageArbo = datapage -> data.pagearbo;
  2855.     /* 
  2856.      * Adresse des sp‚cifications: 
  2857.      */
  2858.     AFNCTSPEC    *    AFnctSpec = pPageArbo -> fnct_spec;
  2859.     /* 
  2860.      * Adresses actuelles pages ‚cran/liens, champs: 
  2861.      */
  2862.     ARBO_TEXTPAR    * *    ppTextPar_First;
  2863.     ARBO_FIELDPARS    * *    ppFieldPar_First;            /* Adr du Ptr sur 1er champ input ou output */
  2864.     KEYWORD_LIST    * *    ppKWLst_FirstKeyW;
  2865.     /* 
  2866.      * Variables repr‚sentant les donn‚es … ‚diter: 
  2867.      */
  2868.     int                nb_lignes;        /* Nbre de lignes de la liste */
  2869.     char        * *    textes;            /* textes des lignes */
  2870.     /* 
  2871.      * Var d'‚dition:
  2872.      */
  2873.     PARPAGE_FLAGS  flags = { 0, 0, 0 };
  2874.     GRECT                start_box;
  2875.     int                modif;            /* A t'on modifi‚? */
  2876.     
  2877.  
  2878.     /* 
  2879.      * Fixe le nom de la page: 
  2880.      */
  2881.     rlink_teptext( &M_pForm_EditArboKeyWords[ EDKEYPAG ], pPageArbo -> chemin );
  2882.     /* 
  2883.      * Fixe la fonction de la page: 
  2884.      */
  2885.     rlink_teptext( &M_pForm_EditArboKeyWords[ EDKEYFNC ], AFnctSpec -> fnct_name );
  2886.     /* 
  2887.      * Fixe le "titre" de la fenˆtre fille: 
  2888.      * Fixe les pointeurs sur la liste d‚sir‚e: 
  2889.      */
  2890.     switch( edit_type )
  2891.     {
  2892.  
  2893.         case    EDIT_PECRAN:
  2894.             dlink_teptext( &M_pForm_EditArboKeyWords[ EDKEYTIT ], " Pages ‚cran " );
  2895.  
  2896.             /* 
  2897.              * Duplique les params: 
  2898.              */
  2899.             ppTextPar_First = &(pPageArbo -> pages_ecran);    /* Pointe sur 1Šre page ‚cran */
  2900.             M_TextPar_copies = Duplicate_TextParList( *ppTextPar_First );
  2901.  
  2902.             /* 
  2903.              * Cr‚ation liste psz: 
  2904.              */
  2905.             nb_lignes = Create_TextParPszList( edit_type, M_TextPar_copies, &textes );
  2906.  
  2907.             break;
  2908.                 
  2909.  
  2910.         case    EDIT_OUTPUTS:
  2911.             dlink_teptext( &M_pForm_EditArboKeyWords[ EDKEYTIT ], " Champs de sortie " );
  2912.  
  2913.             /* 
  2914.              * Duplique les params des champs de saisie: 
  2915.              */
  2916.             ppFieldPar_First = &(pPageArbo -> output_fields);
  2917.             M_fieldpar_copies = Duplicate_SingleLinkList( *ppFieldPar_First, sizeof( void * ) +sizeof( OUTPUT_FPAR ) );    
  2918.             /* 
  2919.              * Cr‚ation liste psz: 
  2920.              */
  2921.             nb_lignes = Create_FieldPszList( EDIT_OUTPUTS, M_fieldpar_copies, &textes );
  2922.  
  2923.             /*
  2924.              * Copie les params de la liste si n‚cessaire:
  2925.              */
  2926.             if( pPageArbo -> pArboListPars != NULL )
  2927.             {    /*
  2928.                  * Copie les paramŠtres:
  2929.                  */
  2930.                 M_ListPars_copy = *( pPageArbo -> pArboListPars );
  2931.                 flags .b_EnableList = TRUE_1;
  2932.             }
  2933.             break;
  2934.             
  2935.  
  2936.         case    EDIT_SAISIES:
  2937.             dlink_teptext( &M_pForm_EditArboKeyWords[ EDKEYTIT ], " Champs de saisie " );
  2938.  
  2939.             /*
  2940.              * Duplique les params des champs d'‚dition: 
  2941.              */
  2942.             ppFieldPar_First = &(pPageArbo -> input_fields);
  2943.             M_fieldpar_copies = Duplicate_SingleLinkList( *ppFieldPar_First, sizeof( void * ) + sizeof( INPUT_FPAR ) );    
  2944.  
  2945.             /* 
  2946.              * Cr‚ation liste psz: 
  2947.              */
  2948.             nb_lignes = Create_FieldPszList( EDIT_SAISIES, M_fieldpar_copies, &textes );
  2949.  
  2950.             break;
  2951.  
  2952.  
  2953.         case    EDIT_DATA:
  2954.             dlink_teptext( &M_pForm_EditArboKeyWords[ EDKEYTIT ], " Donn‚es " );
  2955.  
  2956.             /* 
  2957.              * Duplique les params: 
  2958.              */
  2959.             ppTextPar_First = &(pPageArbo -> databases);    /* Pointe sur 1Šre donn‚e */
  2960.             M_TextPar_copies = Duplicate_TextParList( *ppTextPar_First );
  2961.  
  2962.             /* 
  2963.              * Cr‚ation liste psz: 
  2964.              */
  2965.             nb_lignes = Create_TextParPszList( edit_type, M_TextPar_copies, &textes );
  2966.  
  2967.             break;
  2968.                 
  2969.         case    EDIT_LIENS:
  2970.             dlink_teptext( &M_pForm_EditArboKeyWords[ EDKEYTIT ], " EvŠnements " );
  2971.  
  2972.             /* 
  2973.              * Duplique les params: 
  2974.              */
  2975.             ppKWLst_FirstKeyW = &(pPageArbo -> p_Events);    /* Pointe sur 1Šre donn‚e */
  2976.             M_pKeyWordList_Copy = dup_KeyWordList( *ppKWLst_FirstKeyW );
  2977.  
  2978.             /* 
  2979.              * Cr‚ation liste psz: 
  2980.              */
  2981.             nb_lignes = cree_liste_KeyWord( M_pKeyWordList_Copy, FALSE, &textes );
  2982.  
  2983.             break;
  2984.  
  2985.         case    EDIT_KEYWORDS:
  2986.             dlink_teptext( &M_pForm_EditArboKeyWords[ EDKEYTIT ], " Commandes / Mots Clefs " );
  2987.  
  2988.             /* 
  2989.              * Duplique les params: 
  2990.              */
  2991.             ppKWLst_FirstKeyW = &(pPageArbo -> p_MotsClefs);    /* Pointe sur 1Šre donn‚e */
  2992.             M_pKeyWordList_Copy = dup_KeyWordList( *ppKWLst_FirstKeyW );
  2993.  
  2994.             /* 
  2995.              * Cr‚ation liste psz: 
  2996.              */
  2997.             nb_lignes = cree_liste_KeyWord( M_pKeyWordList_Copy, TRUE_1, &textes );
  2998.  
  2999.             flags .b_EnableAdd = TRUE_1;
  3000.  
  3001.             break;
  3002.  
  3003.         default:
  3004.             ping();
  3005.     }
  3006.  
  3007.     /******************************************************************/
  3008.  
  3009.     objc_xywh ( pWiParams -> draw_ptr.tree, pWiParams -> selected_icon, &start_box );
  3010.  
  3011.     M_edit_pecr_type = edit_type;            /* Var globale */
  3012.  
  3013.     modif = parpage_general( &flags, &start_box, M_KeyWords_EscObjs, &textes, nb_lignes );
  3014.  
  3015.     /******************************************************************/
  3016.  
  3017.     /*
  3018.      * Efface tableau de lignes/Liste de la m‚moire:
  3019.      */
  3020.     Delete_PszList( textes, nb_lignes );
  3021.  
  3022.  
  3023.     /*
  3024.      * Teste  s'il faut sauver les modifs: 
  3025.      */
  3026.     switch( edit_type )
  3027.     {
  3028.         case    EDIT_PECRAN:
  3029.         case    EDIT_DATA:
  3030.             if ( modif == YES1 )
  3031.             {    /*
  3032.                  * Si on a valid‚: 
  3033.                  * Efface les anciennes donn‚es: 
  3034.                  */
  3035.                 Delete_TextParList( *ppTextPar_First );
  3036.  
  3037.                 /*
  3038.                  * Lie la copie modifi‚e, donc les nouvelles donn‚es … la page arbo: 
  3039.                  */
  3040.                 *ppTextPar_First = M_TextPar_copies;
  3041.  
  3042.             }
  3043.             else
  3044.             {    /*
  3045.                   * On a annul‚: 
  3046.                  * Efface la copie des donn‚es: 
  3047.                  */
  3048.                 Delete_TextParList( M_TextPar_copies );
  3049.  
  3050.             }
  3051.  
  3052.             /*
  3053.              * On ne doit plus utiliser la copie: 
  3054.              */
  3055.             M_TextPar_copies = NULL;
  3056.             break;
  3057.  
  3058.  
  3059.         case    EDIT_OUTPUTS:
  3060.         case    EDIT_SAISIES:
  3061.             if ( modif == YES1 )
  3062.             {    /*
  3063.                  * Si on a valid‚: 
  3064.                  * Efface les anciennes donn‚es: 
  3065.                  */
  3066.                 Delete_SingleLinkList( *ppFieldPar_First );
  3067.  
  3068.                 /*
  3069.                  * Lie la copie modifi‚e, donc les nouvelles donn‚es … la page arbo: 
  3070.                  */
  3071.                 *ppFieldPar_First = M_fieldpar_copies;
  3072.  
  3073.  
  3074.                 /*
  3075.                  * Sauve les params de la liste si n‚cessaire:
  3076.                  */
  3077.                 if( flags .b_EnableList )
  3078.                 {
  3079.                     *( pPageArbo -> pArboListPars ) = M_ListPars_copy;
  3080.                 }
  3081.  
  3082.             }
  3083.             else
  3084.             {    /*
  3085.                   * On a annul‚: 
  3086.                  * Efface la copie des donn‚es: 
  3087.                  */
  3088.                 Delete_SingleLinkList( M_fieldpar_copies );
  3089.  
  3090.             }
  3091.  
  3092.             /*
  3093.              * On ne doit plus utiliser la copie: 
  3094.              */
  3095.             M_fieldpar_copies = NULL;
  3096.             break;
  3097.  
  3098.  
  3099.         case    EDIT_LIENS:
  3100.         case    EDIT_KEYWORDS:
  3101.             if ( modif == YES1 )
  3102.             {    /*
  3103.                  * Si on a valid‚: 
  3104.                  * Efface les anciennes donn‚es: 
  3105.                  */
  3106.                 free_KeyWordList( *ppKWLst_FirstKeyW );
  3107.  
  3108.                 /*
  3109.                  * Lie la copie modifi‚e, donc les nouvelles donn‚es … la page arbo: 
  3110.                  */
  3111.                 *ppKWLst_FirstKeyW = M_pKeyWordList_Copy;
  3112.  
  3113.             }
  3114.             else
  3115.             {    /*
  3116.                   * On a annul‚: 
  3117.                  * Efface la copie des donn‚es: 
  3118.                  */
  3119.                 free_KeyWordList( M_pKeyWordList_Copy );
  3120.  
  3121.             }
  3122.  
  3123.             /*
  3124.              * On ne doit plus utiliser la copie: 
  3125.              */
  3126.             M_pKeyWordList_Copy = NULL;
  3127.             break;
  3128.             
  3129.         default:
  3130.             ping();
  3131.     }
  3132.  
  3133.     if( modif == YES1 )
  3134.     {    /*
  3135.          * Si on a valid‚: 
  3136.          * Signale que la page ARBO a ‚t‚ modifi‚e:
  3137.          */
  3138.         dataPage_chgSavState( datapage, SSTATE_MODIFIED, TRUE_1, TRUE_1 );
  3139.     }    
  3140. }
  3141.  
  3142.  
  3143.  
  3144. /*
  3145.  * parpage_general(-)
  3146.  *
  3147.  * Purpose:
  3148.  * --------
  3149.  * Gestion form g‚n‚ral contenant une liste de parametres 
  3150.  * d'une page arbo
  3151.  * Cette proc‚dure sert aussi pour les LIENS_IN
  3152.  *
  3153.  * History:
  3154.  * --------
  3155.  * 1993: fplanque: Created
  3156.  * 02.01.94: fplanque: ajout des () manquantes ds free() des chaines
  3157.  * 04.01.94: nouveau format d'appel de select_in_list()
  3158.  * 18.05.94: Chang‚ params d'appel et sorti disables des boutons vers l'appellant
  3159.  * 04.12.94: ne gŠre plus qu'une seule liste; utilise nlle boite de dialogue
  3160.  * 04.12.94: toute lib‚ration de m‚moire liste se fait … l'‚xt‚rieur (comme pour la cr‚ation!)
  3161.  * 07.01.94: allume bouton add si n‚cessaire
  3162.  * 24.03.95: gestion de flags
  3163.  */
  3164. int    parpage_general( 
  3165.             PARPAGE_FLAGS * flags,
  3166.             GRECT *    start_box,             /* In: Rect de d‚part effet graphique */
  3167.             int    *    esc_objs,            /* In: Tableau des boutons … traiter en exit */
  3168.             char ***    path_array,         /* In: Tableau de lignes psz */
  3169.             int        nb_pecr_link )        /* In: Nbre de lignes dans le s‚lecteur */
  3170. {
  3171.     GRECT                form_box;
  3172.     int                exit_obj;                /* Objet de sortie */
  3173.  
  3174.     /* 
  3175.      * "Eteind" fonctions non (encore) disponibles: 
  3176.      */
  3177.     objc_setdisable( M_pForm_EditArboKeyWords, EDAPFIX );
  3178.     objc_setdisable( M_pForm_EditArboKeyWords, EDAPSUPP);
  3179.     /*
  3180.      * Allume fonctions evt disponibles
  3181.      */
  3182.     objc_fixable( M_pForm_EditArboKeyWords, EDAPADD, flags -> b_EnableAdd );
  3183.     objc_fixable( M_pForm_EditArboKeyWords, EDLISTE, flags -> b_EnableList ); 
  3184.  
  3185.     /*vvvvvvvvvvvvvvvvvvvvvvvvvvvv*/
  3186.     /* App prend en charge souris */
  3187.     WIND_UPDATE_BEG_MCTRL
  3188.     /***  Entr‚e dans un MODE:  ***/
  3189.  
  3190.     /*
  3191.      * Gestion formulaire: 
  3192.      */
  3193.     exit_obj = select_in_list( 
  3194.                     M_pForm_EditArboKeyWords, 
  3195.                     start_box, 
  3196.                     &form_box,
  3197.                     path_array, 
  3198.                     &nb_pecr_link,
  3199.                     esc_objs, 
  3200.                     parapage_actions, 
  3201.                     parpg_fixstate_act,
  3202.                     0 );
  3203.  
  3204.     /***  Sortie du MODE:  ***/
  3205.     /* AES peut reprendre la souris */
  3206.     WIND_UPDATE_END_MCTRL
  3207.     /*^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
  3208.  
  3209.     if ( exit_obj == ADAPVAL )
  3210.     {     /* 
  3211.          * Si on a valid‚: 
  3212.          */
  3213.         return    YES1;        /* Signale qu'il faut prendre en compte les modifs */
  3214.  
  3215.     }
  3216.  
  3217.     return NO0;     /* Signale qu'il n'y a pas de modifs … prendre en compte */
  3218. }
  3219.  
  3220.  
  3221.  
  3222.  
  3223. /*
  3224.  * parapage_actions(-)
  3225.  *
  3226.  * Purpose:
  3227.  * --------
  3228.  * Traitement des objets exit du formulaire pr‚c‚dent
  3229.  *
  3230.  * Notes:
  3231.  * ------
  3232.  * On ne fait RIEN lorsque l'on clique sur un elt ds la liste...
  3233.  *
  3234.  * History:
  3235.  * --------
  3236.  * 1993: fplanque: Created
  3237.  * 04.01.94: l'allumage des bout d'actions lors de la sel d'un elt se fait d‚sormais hors-d'ici
  3238.  * 07.01.95: gestion double click; mots clefs
  3239.  */
  3240. int    parapage_actions( LISTHANDLES *list_handles, int    obj )
  3241. {
  3242.     if( obj & SEL_LINE )
  3243.     {
  3244.         if( obj & DBLE_CLICLK )
  3245.         {    /*
  3246.             * Si on a double cliqu‚ sur un nom:
  3247.              * simule appui sur fixer
  3248.              */
  3249.             goto    parapage_fix;
  3250.         }
  3251.     }
  3252.     else
  3253.         switch( obj )
  3254.         {
  3255.             case    ADAPVAL:
  3256.             case    EDAPANN:
  3257.                 return    FALSE0;        /* Met fin au dialogue */
  3258.                 
  3259.             case    EDAPFIX:
  3260. parapage_fix:
  3261.                 switch( M_edit_pecr_type )
  3262.                 {
  3263.                     case    EDIT_PECRAN:
  3264.                     case    EDIT_DATA:
  3265.                         /*
  3266.                          * Appel du s‚lecteur d'objets: 
  3267.                          */
  3268.                         edpgecr_callselect( list_handles, EDAPFIX );
  3269.                         break;
  3270.  
  3271.                     case    EDIT_OUTPUTS:
  3272.                         /*
  3273.                          * Appel boŒte de param‚trage d'un champ d'affichage: 
  3274.                          */
  3275.                         parapg_parasortie( list_handles, M_pForm_EditArboKeyWords, EDAPFIX );
  3276.                         break;
  3277.                         
  3278.                     case    EDIT_SAISIES:
  3279.                         /*
  3280.                          * Appel boŒte de param‚trage d'un champ de saisie: 
  3281.                          */
  3282.                         parapg_parasaisie( list_handles, M_pForm_EditArboKeyWords, EDAPFIX );
  3283.                         break;
  3284.  
  3285.                     case    EDIT_KEYWORDS:
  3286.                         /*
  3287.                          * ParamŠtrage d'une commande:
  3288.                          */ 
  3289.                         fixe_MotClef( list_handles, TRUE_1, M_pForm_EditArboKeyWords, EDAPFIX );
  3290.                         break;
  3291.  
  3292.                     case    EDIT_LIENS:
  3293.                         /*
  3294.                          * ParamŠtrage d'un ‚vŠnement:
  3295.                          */ 
  3296.                         fixe_MotClef( list_handles, FALSE0, M_pForm_EditArboKeyWords, EDAPFIX );
  3297.                         break;
  3298.  
  3299.                     default:
  3300.                         ping();                        
  3301.                 }
  3302.                 break;
  3303.         
  3304.             case    EDAPSPEC:
  3305.                 /*
  3306.                  * Visualisation d'une page ‚cran:
  3307.                  */
  3308.                 watch_PageEcran( M_pForm_EditArboKeyWords, EDAPSPEC );
  3309.                 
  3310.                 break;
  3311.  
  3312.             case    EDAPADD:
  3313.                 /*
  3314.                  * Ajoute un mot clef:
  3315.                  */
  3316.                 if( ajoute_MotClef( list_handles, M_pForm_EditArboKeyWords, EDAPFIX ) )
  3317.                 {    /*
  3318.                      * On a chang‚ la liste:
  3319.                      * il va falloir r‚afficher et initialiser variables 
  3320.                      */
  3321.                     return    CHANGE_2;        
  3322.                 }
  3323.                 break;
  3324.  
  3325.             case    EDAPSUPP:
  3326.                 /*
  3327.                  * Supprime un mot clef:
  3328.                  */
  3329.                 if( supprime_MotClef( list_handles ) )
  3330.                 {    /*
  3331.                      * On a chang‚ la liste:
  3332.                      * il va falloir r‚afficher et initialiser variables 
  3333.                      */
  3334.                     return    CHANGE_2;        
  3335.                 }
  3336.                 break;
  3337.     
  3338.             case    EDLISTE:
  3339.                 switch( M_edit_pecr_type )
  3340.                 {
  3341.                     case    EDIT_OUTPUTS:
  3342.                         /*
  3343.                          * Appel boŒte de param‚trage de la liste: 
  3344.                          */
  3345.                         parapg_paralist( &M_ListPars_copy, M_pForm_EditArboKeyWords, EDLISTE );
  3346.                         break;
  3347.                         
  3348.                     default:
  3349.                         ping();                        
  3350.                 }
  3351.                 break;
  3352.  
  3353.             default:
  3354.                 ping();
  3355.         }
  3356.     
  3357.     return    TRUE_1;            /* Continue dialogue */
  3358. }
  3359.  
  3360.  
  3361. /*
  3362.  * parpg_fixstate_act(-)
  3363.  *
  3364.  * Purpose:
  3365.  * --------
  3366.  * Selon qu'un elt est courament selectionn‚ ds la liste textuelle:
  3367.  * Allume ou eteind en direct les boutons d'action associ‚s.
  3368.  *
  3369.  * Algorythm:
  3370.  * ----------
  3371.  * - D‚termine si une ligne est s‚lectionn‚e...
  3372.  * - Allume/Eteind les boutons...
  3373.  *
  3374.  * History:
  3375.  * --------
  3376.  * 04.01.94: fplanque: Created
  3377.  * 07.01.95: fplanque: gŠre bouton SUPPRESSION
  3378.  */
  3379. void    parpg_fixstate_act(                     /* Out: Rien */
  3380.             LISTHANDLES *list_handles )    /* In: Ptr sur infos sur la liste & le dialogue affich‚s */
  3381. {
  3382.  
  3383.     if( list_handles -> selected_line != NIL )
  3384.     {    /*
  3385.          * S'il y a une ligne s‚lectionn‚e: il faut ALLUMER:
  3386.          */
  3387.         objc_enable( M_pForm_EditArboKeyWords, EDAPFIX );
  3388.  
  3389.         if ( M_edit_pecr_type == EDIT_KEYWORDS )
  3390.         {
  3391.             objc_enable( M_pForm_EditArboKeyWords, EDAPSUPP );
  3392.         }
  3393.     }
  3394.     else
  3395.     {    /*
  3396.          * S'il n'y a PAS de ligne s‚lectionn‚e: il faut ETEINDRE:
  3397.          */
  3398.         objc_disable( M_pForm_EditArboKeyWords, EDAPFIX );
  3399.         objc_disable( M_pForm_EditArboKeyWords, EDAPSUPP );
  3400.     }
  3401. }
  3402.  
  3403.  
  3404.  
  3405. /*
  3406.  * -------------- EDITION DES PARAMS SPECIFIQUES D'UNE PAGE --------------
  3407.  */
  3408.  
  3409.  
  3410. /*
  3411.  * edit_SpecPar_LectMsg(-)
  3412.  *
  3413.  * Purpose:
  3414.  * --------
  3415.  * Edition de paramŠtres sp‚cifiques 
  3416.  * … la page arbo lecture message
  3417.  *
  3418.  * History:
  3419.  * --------
  3420.  * 28.03.95: fplanque: Created based on edit_arbopar_params()
  3421.  */ 
  3422. BOOL    edit_SpecPar_LectMsg(
  3423.             LECTURE_PAR    *    pLECP_ParamsLecture,
  3424.             GRECT            *    pStartBox )    
  3425. {
  3426.     /*
  3427.      * Variables Edition: 
  3428.      */
  3429.     GRECT                form_box;
  3430.     int                edit = 0;            /* Bidon */
  3431.     int                exit_obj;
  3432.  
  3433.     /* 
  3434.      * Fixe flags des boutons: 
  3435.      */
  3436.     objc_fixsel( M_pForm_EditParamsLect, ANNUEFFA,
  3437.                      pLECP_ParamsLecture -> n_Annule_Efface );
  3438.  
  3439.  
  3440.     /*vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/
  3441.  
  3442.     WIND_UPDATE_BEG_MCTRL
  3443.     open_dialog( M_pForm_EditParamsLect, pStartBox, &form_box );
  3444.  
  3445.     /* 
  3446.      * Gestion dialogue: 
  3447.      */
  3448.     exit_obj=ext_form_do( M_pForm_EditParamsLect, &edit);    /* Gestion de la boŒte */
  3449.     
  3450.     close_dialog( M_pForm_EditParamsLect, exit_obj, pStartBox, &form_box );
  3451.     WIND_UPDATE_END_MCTRL
  3452.  
  3453.     /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
  3454.  
  3455.     /* 
  3456.      * Sauvegarde des modifs: 
  3457.      */
  3458.     if( exit_obj == PLECTVAL )
  3459.     {    /*
  3460.           * Si on a valid‚:
  3461.           */
  3462.         pLECP_ParamsLecture -> n_Annule_Efface = objc_testsel( M_pForm_EditParamsLect, ANNUEFFA );
  3463.  
  3464.         return    TRUE_1;
  3465.     }
  3466.  
  3467.     return    FALSE0;
  3468. }            
  3469.  
  3470.  
  3471.  
  3472. /*
  3473.  * edit_SpecPar_FileSel(-)
  3474.  *
  3475.  * Purpose:
  3476.  * --------
  3477.  * Edition de paramŠtres sp‚cifiques 
  3478.  * … la page arbo s‚lecteur de fichier
  3479.  *
  3480.  * History:
  3481.  * --------
  3482.  * 28.03.95: fplanque: Created based on edit_arbopar_params()
  3483.  */ 
  3484. BOOL    edit_SpecPar_FileSel(
  3485.             FILESEL_PAR    *    pFileSelPars,
  3486.             GRECT            *    pStartBox )    
  3487. {
  3488.     /*
  3489.      * Variables Edition: 
  3490.      */
  3491.     GRECT                form_box;
  3492.     int                edit = 0;            /* Bidon */
  3493.     int                exit_obj;
  3494.  
  3495.     /* 
  3496.      * Fixe flags des boutons: 
  3497.      */
  3498.     int    n_flags = pFileSelPars -> n_flags;
  3499.     objc_fixsel( M_pForm_EditParFileSel, FSELIHID, n_flags & FA_HIDDEN );
  3500.     objc_fixsel( M_pForm_EditParFileSel, FSELISYS, n_flags & FA_SYSTEM );
  3501.     objc_fixsel( M_pForm_EditParFileSel, FSELISUB, n_flags & FA_SUBDIR );
  3502.  
  3503.     fix_ftext( M_pForm_EditParFileSel, FSELROOT, pFileSelPars -> pMsz_RootPath );
  3504.  
  3505.     /*vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/
  3506.  
  3507.     WIND_UPDATE_BEG_MCTRL
  3508.     open_dialog( M_pForm_EditParFileSel, pStartBox, &form_box );
  3509.  
  3510.     /* 
  3511.      * Gestion dialogue: 
  3512.      */
  3513.     exit_obj=ext_form_do( M_pForm_EditParFileSel, &edit);    /* Gestion de la boŒte */
  3514.     
  3515.     close_dialog( M_pForm_EditParFileSel, exit_obj, pStartBox, &form_box );
  3516.     WIND_UPDATE_END_MCTRL
  3517.  
  3518.     /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
  3519.  
  3520.     /* 
  3521.      * Sauvegarde des modifs: 
  3522.      */
  3523.     if( exit_obj == FSELVAL )
  3524.     {    /*
  3525.           * Si on a valid‚:
  3526.           */
  3527.         n_flags = 0;
  3528.         if( objc_testsel( M_pForm_EditParFileSel, FSELIHID ) )
  3529.         {
  3530.             n_flags |= FA_HIDDEN;
  3531.         }
  3532.         if( objc_testsel( M_pForm_EditParFileSel, FSELISYS ) )
  3533.         {
  3534.             n_flags |= FA_SYSTEM;
  3535.         }
  3536.         if( objc_testsel( M_pForm_EditParFileSel, FSELISUB ) )
  3537.         {
  3538.             n_flags |= FA_SUBDIR;
  3539.         }
  3540.         pFileSelPars -> n_flags = n_flags;
  3541.  
  3542.         /*
  3543.          * Path:
  3544.          */
  3545.         free_String( pFileSelPars -> pMsz_RootPath );
  3546.         pFileSelPars -> pMsz_RootPath = extract_ftext( M_pForm_EditParFileSel, FSELROOT );
  3547.         
  3548.         return    TRUE_1;
  3549.     }
  3550.  
  3551.     return    FALSE0;
  3552. }            
  3553.  
  3554.                       
  3555. /*
  3556.  * edit_arbopar_params(-)
  3557.  *
  3558.  * Purpose:
  3559.  * --------
  3560.  * Edition de paramŠtres sp‚cifiques d'une page arbo 
  3561.  *
  3562.  * History:
  3563.  * --------
  3564.  * 10.05.94: fplanque: Created based on edit_arbopar_datas()
  3565.  * 14.12.94: signale que la page arbo a ‚t‚ modifi‚e
  3566.  * 27.06.95: extracted FA_LECT_MSG specific code
  3567.  */
  3568. void edit_arbopar_params( 
  3569.             WIPARAMS *    pWiParams )    /* In: Fen contenant le menu arbo depuis lequel on appelle */
  3570. {
  3571.     /*    
  3572.      * Adresse page arbo: 
  3573.      */
  3574.     DATAPAGE        *    datapage = pWiParams -> datapage;        /* Page ARBO concern‚e */
  3575.     PAGEARBO        *    pagearbo = datapage -> data.pagearbo;
  3576.     /* 
  3577.      * Adresses params: 
  3578.      */
  3579.     ARBO_SPECIALPAR SpecPars = pagearbo -> special_par;
  3580.  
  3581.     GRECT    start_box;
  3582.     BOOL    res;
  3583.     
  3584.  
  3585.     /* 
  3586.      * D‚part de l'effet graphique: 
  3587.      */
  3588.     objc_xywh ( pWiParams -> draw_ptr.tree, 
  3589.                     pWiParams -> selected_icon, &start_box );
  3590.  
  3591.     switch( pagearbo -> fnct_no )
  3592.     {
  3593.         case    FA_LECT_MSG:
  3594.             res = edit_SpecPar_LectMsg( SpecPars.lecture, &start_box );
  3595.             break;
  3596.             
  3597.         case    FA_FILESEL:
  3598.             res = edit_SpecPar_FileSel( SpecPars.filesel, &start_box );
  3599.             break;
  3600.     
  3601.         default:
  3602.             signale("Ne sait pas editer les params pour cette page" );
  3603.             res = FALSE0;
  3604.     }
  3605.  
  3606.  
  3607.     if( res == TRUE_1 )
  3608.     {    /*
  3609.          * Signale que la page a ‚t‚ modifi‚e:
  3610.          */
  3611.         dataPage_chgSavState( datapage, SSTATE_MODIFIED, TRUE_1, TRUE_1 );
  3612.     }
  3613. }
  3614.  
  3615.                       
  3616.  
  3617. /*
  3618.  * ----------------- EDITION DES MOTS CLEFS D'UNE PAGE ------------------
  3619.  */
  3620.  
  3621.  
  3622. /*
  3623.  * ajoute_MotClef(-)
  3624.  *
  3625.  * Purpose:
  3626.  * --------
  3627.  * Ajoute 1 mot clef … la liste courament ‚dit‚e
  3628.  *
  3629.  * Suggest:
  3630.  * ------
  3631.  * sortir le test de ligne s‚lectionn‚e qui est identique ds ajoute_voie()
  3632.  *
  3633.  * History:
  3634.  * --------
  3635.  * 18.05.94: fplanque: Created bases on ajoute_voie()
  3636.  * 07.01.95: new params, edition avant d'entrer le MC dans la liste
  3637.  * 15.03.95: appel de KeyWordLElt_Create()
  3638.  */
  3639. BOOL    ajoute_MotClef(                         /* Out: TRUE_1 si on a valid‚ */
  3640.             LISTHANDLES *    p_ListHandles,    /* In: Params de la liste des mots clefs */
  3641.             OBJECT         *    pForm_fond,     /* In: Formulaire qui a appel‚ */
  3642.             int                 n_callObj )        /* In: Obj aui a appell‚ sur ce formulaire */
  3643. {
  3644.     KEYWORD_LIST *    pDblText_elt = M_pKeyWordList_Copy;    /* mot-clef en cours de traitement */
  3645.     KEYWORD_LIST * *    last_ptr_tonext = &M_pKeyWordList_Copy;
  3646.     KEYWORD_LIST *    new_KeyWord;
  3647.     char              * *    param_array;
  3648.     
  3649.     int    nb_items;
  3650.     int    n_NewItem_index = 0;
  3651.     int    selected_line;
  3652.  
  3653.  
  3654.     /* 
  3655.      * -----------------------
  3656.      * Alloue nouveau mot clef 
  3657.      * -----------------------
  3658.      */
  3659.     new_KeyWord = KeyWordLElt_Create( FL_ENVOI,
  3660.                                     ACTION_NONE, ACTION_FULLCLS,
  3661.                                     G_empty_string, G_empty_string );
  3662.  
  3663.     /*
  3664.      * Edition des paramŠtres:
  3665.      */
  3666.     if( ! edit_MotClef( new_KeyWord, TRUE_1, pForm_fond, n_callObj ) )
  3667.     {
  3668.         KeyWordLElt_Destroy( new_KeyWord );
  3669.         return    FALSE0;
  3670.     }    
  3671.  
  3672.     /*
  3673.      * Trouve la fin de la liste:
  3674.      */
  3675.     while( pDblText_elt != NULL )
  3676.     {
  3677.         last_ptr_tonext = &( pDblText_elt -> next );
  3678.         pDblText_elt = pDblText_elt -> next;
  3679.         n_NewItem_index ++;
  3680.     }
  3681.  
  3682.     /* 
  3683.      * Liaison avec le reste: 
  3684.      */
  3685.     *last_ptr_tonext = new_KeyWord;
  3686.  
  3687.     /* 
  3688.      * -------------------------------------------------------
  3689.      * Une ligne de plus dans la liste de s‚lection textuelle: 
  3690.      * -------------------------------------------------------
  3691.      */
  3692.     (p_ListHandles -> nb_items) ++;        /* 1 elt de plus */
  3693.     nb_items = p_ListHandles -> nb_items;
  3694.  
  3695.     /*
  3696.      * Agrandi la liste: 
  3697.      */
  3698.     param_array = (char * *) REALLOC( *(p_ListHandles -> pTpsz_array), nb_items * sizeof( char * ) );
  3699.     *(p_ListHandles -> pTpsz_array) = param_array;
  3700.  
  3701.     /*
  3702.      * Ajoute une nouvelle ligne … la fin de la liste: 
  3703.      */
  3704.     param_array[ n_NewItem_index ] = cree_ligne_KeyWord( new_KeyWord, TRUE_1 );
  3705.  
  3706.     /* 
  3707.      * Nouvelle ligne s‚lectionn‚e: 
  3708.      */
  3709.     selected_line = n_NewItem_index - p_ListHandles -> top_item + p_ListHandles -> first_name;
  3710.  
  3711.     /*
  3712.      * V‚rifie qu'on est dans la partie visible: 
  3713.      */
  3714.     if ( selected_line > p_ListHandles -> last_name )
  3715.     {    /* 
  3716.          * Si on est trop haut: 
  3717.          * On va d‚scendre l'affichage dans la liste: 
  3718.          */
  3719.         p_ListHandles -> top_item += selected_line - p_ListHandles -> last_name;
  3720.         selected_line = p_ListHandles -> last_name;
  3721.     }
  3722.     else if( selected_line < p_ListHandles -> first_name ) 
  3723.     {    /* 
  3724.          * Si on est trop bas: 
  3725.          * On va monter l'affichage dans la liste: 
  3726.          */
  3727.         p_ListHandles -> top_item -= p_ListHandles -> first_name - selected_line;
  3728.         selected_line = p_ListHandles -> first_name;
  3729.     }
  3730.  
  3731.     p_ListHandles -> selected_line = selected_line;
  3732.  
  3733.     return    TRUE_1;
  3734. }
  3735.  
  3736.  
  3737.  
  3738. /*
  3739.  * supprime_MotClef(-)
  3740.  *
  3741.  * Purpose:
  3742.  * --------
  3743.  * Supprime le mot clef courament s‚lection‚
  3744.  *
  3745.  * History:
  3746.  * --------
  3747.  * 07.01.95: fplanque: Created
  3748.  * 22.13.95: d‚truit mot clef supprim‚ (apparemment ce n'‚tait pas fait!)
  3749.  */
  3750. BOOL    supprime_MotClef(                         /* Out: TRUE_1 si on a valid‚ */
  3751.             LISTHANDLES *    p_ListHandles )    /* In: Params de la liste des mots clefs */
  3752. {
  3753.  
  3754.     KEYWORD_LIST *    pDblText_paramsMotClef;
  3755.     int                     n_indexMotClef;
  3756.     int                    nb_items;
  3757.     int                    nb_Lines;
  3758.     char              * *    param_array;
  3759.  
  3760.     /*
  3761.      * Demande confirmation:
  3762.      */
  3763.     if( form_alert( 2, "[3][|"
  3764.                                     "Voulez-vous vraiment|"
  3765.                                     "supprimer ce mot clef?]"
  3766.                                     "[Oui|Non]" ) != 1 )
  3767.     {
  3768.         return    FALSE0;
  3769.     }
  3770.  
  3771.     /* 
  3772.      * No d'ordre mot clef concern‚ ds liste: 
  3773.      */
  3774.      n_indexMotClef = get_no_selitem( p_ListHandles );
  3775.  
  3776.     /*
  3777.      * Trouve les parametres du champ concern‚: 
  3778.      */
  3779.     pDblText_paramsMotClef = findElt_KWLst_byIndex( M_pKeyWordList_Copy, n_indexMotClef );
  3780.  
  3781.     /*
  3782.      * Change les liens de la liste
  3783.      * pour ne pus passer par le mot clef … supprimer:
  3784.      */
  3785.     if( M_pKeyWordList_Copy == pDblText_paramsMotClef )
  3786.     {    /*
  3787.          * Il s'agit du premier mot clef:
  3788.          * On change le d‚but de la liste pour pointer vers la ligne suivante:
  3789.          */
  3790.         M_pKeyWordList_Copy = pDblText_paramsMotClef -> next;
  3791.     }
  3792.     else
  3793.     {    /*
  3794.          * On fait pointer le pr‚c‚dent vers le suivant:
  3795.          */
  3796.         KEYWORD_LIST *    pDblText_prevMotClef = findElt_KWLst_byIndex( M_pKeyWordList_Copy, n_indexMotClef -1 );
  3797.         pDblText_prevMotClef -> next = pDblText_paramsMotClef -> next;
  3798.     }
  3799.     
  3800.     /*
  3801.      * D‚truit mot clef:
  3802.      */
  3803.     KeyWordLElt_Destroy( pDblText_paramsMotClef );
  3804.  
  3805.     /* 
  3806.      * -------------------------------------------------------
  3807.      * Une ligne de moins dans la liste de s‚lection textuelle: 
  3808.      * -------------------------------------------------------
  3809.      */
  3810.     (p_ListHandles -> nb_items) --;        /* 1 elt de moins */
  3811.     nb_items = p_ListHandles -> nb_items;
  3812.  
  3813.     /*
  3814.      * Supprime ligne dans la liste textuelle: 
  3815.      */
  3816.     param_array = (char * *) REALLOC( *(p_ListHandles -> pTpsz_array), nb_items * sizeof( char * ) );
  3817.     free_String( param_array[ n_indexMotClef ] );
  3818.     /*
  3819.      * D‚cale la suite
  3820.      */
  3821.     memcpy( ¶m_array[ n_indexMotClef ], ¶m_array[ n_indexMotClef + 1 ], sizeof( char * ) * (nb_items - n_indexMotClef) );
  3822.  
  3823.     /* 
  3824.      * Plus de ligne s‚lectionn‚e: 
  3825.      */
  3826.     p_ListHandles -> selected_line = NIL_1;
  3827.  
  3828.     /*
  3829.      * V‚rifie qu'on ne laisse pas de lignes vides
  3830.      * alors que tout n'est pas visible: 
  3831.      */
  3832.     nb_Lines = p_ListHandles -> last_name - p_ListHandles -> first_name + 1;
  3833.  
  3834.     if( p_ListHandles -> top_item + nb_Lines > nb_items )
  3835.     {
  3836.         p_ListHandles -> top_item = max( 0, nb_items - nb_Lines );
  3837.     } 
  3838.  
  3839.     return    TRUE_1;    
  3840. }
  3841.  
  3842.  
  3843. /*
  3844.  * fixe_MotClef(-)
  3845.  *
  3846.  * Purpose:
  3847.  * --------
  3848.  * Permet de modifier (fixer) les paramŠtres du mot clef s‚lectionn‚
  3849.  * dans la liste courament ‚dit‚e
  3850.  *
  3851.  * History:
  3852.  * --------
  3853.  * 18.05.94: fplanque: Created bases on ajoute_voie()
  3854.  * 07.01.95: appelle edit_MotClef()
  3855.  * 12.04.95: b_Command
  3856.  */
  3857. void    fixe_MotClef( 
  3858.             LISTHANDLES *    p_ListHandles,    /* In: Params de la liste des mots clefs */
  3859.             BOOL                b_Command,        /* In: TRUE_1 si on traite une commande, sinon on triate un event */
  3860.             OBJECT         *    pForm_fond,     /* In: Formulaire qui a appel‚ */
  3861.             int                 n_callObj )        /* In: Obj aui a appell‚ sur ce formulaire */
  3862. {
  3863.  
  3864.     KEYWORD_LIST *    pDblText_paramsMotClef;
  3865.     
  3866.     /* 
  3867.      * No d'ordre mot clef concern‚ ds liste: 
  3868.      */
  3869.     int     n_indexMotClef = get_no_selitem( p_ListHandles );
  3870.  
  3871.     /*
  3872.      * Trouve les parametres du champ concern‚: 
  3873.      */
  3874.     pDblText_paramsMotClef = findElt_KWLst_byIndex( M_pKeyWordList_Copy, n_indexMotClef );
  3875.         
  3876.  
  3877.     /*
  3878.      * Edition des paramŠtres:
  3879.      */
  3880.     if( edit_MotClef( pDblText_paramsMotClef, b_Command, pForm_fond, n_callObj ) )
  3881.     {    /*
  3882.          * Si on a confirm‚: 
  3883.          * Variables: 
  3884.          */
  3885.         char    * *path_array = *(p_ListHandles -> pTpsz_array);
  3886.         char    * *resume = &path_array[ n_indexMotClef ];    /* R‚sum‚ des paramŠtres */
  3887.  
  3888.         /* 
  3889.          * Modifie la ligne dans le formulaire: 
  3890.          * Efface ancienne ligne: 
  3891.          */
  3892.         free_String( *resume );                            /* LibŠre ancien contenu */
  3893.  
  3894.         /*
  3895.          * Cr‚e nouvelle ligne et place ptr dans tableau: 
  3896.          */
  3897.         *resume = cree_ligne_KeyWord( pDblText_paramsMotClef, b_Command );
  3898.         
  3899.         /*
  3900.          * Fixe nlle ligne:
  3901.          */
  3902.         list_fix1name( pForm_fond, p_ListHandles -> selected_line, *resume );
  3903.     }
  3904. }
  3905.  
  3906.  
  3907.  
  3908.  
  3909. /*
  3910.  * edit_MotClef(-)
  3911.  *
  3912.  * Purpose:
  3913.  * --------
  3914.  * Edite les paramŠtres d'un mot clef
  3915.  * pass‚ en paramŠtre
  3916.  *
  3917.  * Suggest:
  3918.  * --------
  3919.  * Compl‚ter la gestion des entˆtes de nom: 'ARB:\'
  3920.  *
  3921.  * History:
  3922.  * --------
  3923.  * 07.01.95: fplanque: Extracted from fixe_MotClef()
  3924.  * 14.03.95: fplanque: gestion popup actions
  3925.  * 22.03.95: fplanque: petites optimisations
  3926.  * 29.03.95: fplanque: debugged when NULL pointers; gestion des Evenements, extended
  3927.  * 12.04.95: fplanque: param b_MotClef
  3928.  * 11.07.95: fplanque: corrig‚ dup_String de la page destination
  3929.  */
  3930. BOOL    edit_MotClef(                                            /* Out: TRUE_1 si valid‚ */
  3931.             KEYWORD_LIST *    pDblText_paramsMotClef,        /* In:  Mot clef … ‚diter */
  3932.             BOOL                b_MotClef,                        /* In:  TRUE si mot clef, sinon: event */
  3933.             OBJECT          *    pForm_fond,                     /* In:  Formulaire qui a appel‚ */
  3934.             int                 n_callObj )                        /* In:  Obj aui a appell‚ sur ce formulaire */
  3935. {
  3936.     int            exit_obj;
  3937.     int            edit = MOTCLEF;
  3938.     GRECT            GRect_start;
  3939.     GRECT            GRect_form;
  3940.     char        *    piBsz_PgArboDest;
  3941.     char         *    pMsz_PgArboDest;
  3942.     char         *    cpsz_Event;
  3943.     const char* cpsz_title;
  3944.  
  3945.     OBJECT *    pObj_PageArbo = &(M_pForm_EditMotClef[ MCARBOD ]);
  3946.  
  3947.     /*
  3948.      * Fixe les valeurs dans le formulaire: 
  3949.      */
  3950.     if( b_MotClef )
  3951.     {
  3952.         cpsz_title = "Edition d'une Commande";
  3953.         objc_setenable( M_pForm_EditMotClef, MOTCLEF );
  3954.     }
  3955.     else
  3956.     {
  3957.         cpsz_title = "Edition d'un EvŠnement";
  3958.         objc_setdisable( M_pForm_EditMotClef, MOTCLEF );
  3959.     }
  3960.     
  3961.     dlink_teptext( &M_pForm_EditMotClef[ EVKEYTIT ], cpsz_title );
  3962.  
  3963.     cpsz_Event = fnct_spec( G_fnctlink, pDblText_paramsMotClef -> n_Event ) -> fnct_name;
  3964.     dlink_teptext( &M_pForm_EditMotClef[ NOMEVENT ], cpsz_Event );
  3965.  
  3966.     fix_ftext( M_pForm_EditMotClef, MOTCLEF, pDblText_paramsMotClef -> psz_KeyWord );
  3967.  
  3968.     pMsz_PgArboDest = dup_String( pDblText_paramsMotClef -> psz_DestPage );
  3969.     rlink_teptext( pObj_PageArbo, pMsz_PgArboDest );
  3970.  
  3971.     /* 
  3972.      * Fixe noms actions dans le formulaire: 
  3973.      */
  3974.     fix_popup_title( &M_pForm_EditMotClef[ MCACTION ], G_Popup_ActionMenu, pDblText_paramsMotClef -> n_Action1 );
  3975.     fix_popup_title( &M_pForm_EditMotClef[ CACTION2 ], G_Popup_ActionMenu, pDblText_paramsMotClef -> n_Action2 );
  3976.  
  3977.     /* 
  3978.      * D‚part de l'effet graphique: 
  3979.      */
  3980.     objc_xywh( pForm_fond, n_callObj, &GRect_start );
  3981.     open_dialog( M_pForm_EditMotClef, &GRect_start, &GRect_form );
  3982.     
  3983.     do
  3984.     {    /*
  3985.          * Gestion dialogue: 
  3986.          */
  3987.         exit_obj = ext_form_do( M_pForm_EditMotClef, &edit);    /* Gestion de la boŒte */
  3988.  
  3989.         switch( exit_obj )
  3990.         {
  3991.             case    MCACTION:
  3992.             case    MCACTBUT:
  3993.             {    /*
  3994.                  * Changement action:
  3995.                  * Appelle le Pop-Up: 
  3996.                  */
  3997.                 int    selected = popup_inform( M_pForm_EditMotClef, exit_obj, MCACTION, G_Popup_ActionMenu, 
  3998.                                              Popup_GetCurrVal( &M_pForm_EditMotClef[ exit_obj ] ) );    
  3999.                 if( selected != ABORT_2 )
  4000.                 {
  4001.                     fix_popup_title( &M_pForm_EditMotClef[ MCACTION ], G_Popup_ActionMenu, selected );
  4002.                     objc_draw( M_pForm_EditMotClef, MCACTION, 1, GRect_form .g_x,
  4003.                            GRect_form .g_y, GRect_form .g_w, GRect_form .g_h );
  4004.                 }
  4005.  
  4006.                 graf_mouse( ARROW, 0);                    /* souris: FlŠche */
  4007.  
  4008.                 break;
  4009.             }
  4010.             
  4011.             case    CACTION2:
  4012.             case    CACTBUT2:
  4013.             {    /*
  4014.                  * Changement action:
  4015.                  * Appelle le Pop-Up: 
  4016.                  */
  4017.                 int    selected = popup_inform( M_pForm_EditMotClef, exit_obj, CACTION2, G_Popup_ActionMenu, 
  4018.                                              Popup_GetCurrVal( &M_pForm_EditMotClef[ exit_obj ] ) );
  4019.                 if( selected != ABORT_2 )
  4020.                 {
  4021.                     fix_popup_title( &M_pForm_EditMotClef[ CACTION2 ], G_Popup_ActionMenu, selected );
  4022.                     objc_draw( M_pForm_EditMotClef, CACTION2, 1, GRect_form .g_x,
  4023.                            GRect_form .g_y, GRect_form .g_w, GRect_form .g_h );
  4024.                 }
  4025.  
  4026.                 graf_mouse( ARROW, 0);                    /* souris: FlŠche */
  4027.  
  4028.                 break;
  4029.             }
  4030.  
  4031.             case    BTARBODE:
  4032.             {    /*
  4033.                  * Si on veut fixer la destination:
  4034.                  * S‚lecteur RAM: 
  4035.                  */
  4036.                 RAMSEL  selection = ramselect_fromForm( "S‚lection d'une page arbo:",
  4037.                                                         find_datagroup_byType( DTYP_ARBO ), 
  4038.                                                         &piBsz_PgArboDest,
  4039.                                                         M_pForm_EditMotClef,
  4040.                                                         exit_obj );
  4041.                 if( selection != RAMSEL_ABORT )
  4042.                 {
  4043.                     GRECT    name_box;
  4044.     
  4045.                     /*
  4046.                      * Oublie l'ancien et Sauve nom de page:
  4047.                      */
  4048.                     freeOld_dupString( &pMsz_PgArboDest, &(piBsz_PgArboDest[5]) );    
  4049.     
  4050.                     /*
  4051.                      * Change nom de la page dans le formulaire: 
  4052.                      */
  4053.                     rlink_teptext( pObj_PageArbo, pMsz_PgArboDest );
  4054.                     /*
  4055.                      * Redessine nom: 
  4056.                      */
  4057.                     objc_xywh( M_pForm_EditMotClef, MCARBOD, &name_box );
  4058.                     objc_draw( M_pForm_EditMotClef, MCARBOD, 1,
  4059.                                   name_box .g_x, name_box .g_y, name_box .g_w, name_box .g_h );
  4060.                 }
  4061.     
  4062.                 graf_mouse( ARROW, 0);                    /* souris: FlŠche */
  4063.         
  4064.                 /* 
  4065.                  * D‚s‚lectionne bouton d'appel: 
  4066.                  */
  4067.                 objc_dsel( M_pForm_EditMotClef, exit_obj );
  4068.             }
  4069.         }
  4070.  
  4071.     }while ( exit_obj != MOTCLVAL  &&  exit_obj != MOTCLANN );
  4072.     
  4073.     close_dialog( M_pForm_EditMotClef, exit_obj, &GRect_start, &GRect_form );
  4074.  
  4075.     /*
  4076.      * Redessine le fond: 
  4077.      */
  4078.     objc_draw( pForm_fond, 0, 5, GRect_form .g_x, GRect_form .g_y, GRect_form .g_w, GRect_form .g_h );
  4079.  
  4080.     if ( exit_obj == MOTCLVAL )
  4081.     {    /*
  4082.          * Sauvegarde: 
  4083.          */
  4084.         if( b_MotClef )
  4085.         {
  4086.             freeOld_dupString( &pDblText_paramsMotClef -> psz_KeyWord,
  4087.                                      extract_ftext( M_pForm_EditMotClef, MOTCLEF ) );
  4088.         }
  4089.  
  4090.         /*
  4091.          * Utilise la var locale:
  4092.          */
  4093.         free_String( pDblText_paramsMotClef -> psz_DestPage );
  4094.         pDblText_paramsMotClef -> psz_DestPage = pMsz_PgArboDest;
  4095.     
  4096.         /*
  4097.          * Action (Popup):
  4098.          */
  4099.         pDblText_paramsMotClef -> n_Action1 = Popup_GetCurrVal( &M_pForm_EditMotClef[ MCACTION ] );
  4100.         pDblText_paramsMotClef -> n_Action2 = Popup_GetCurrVal( &M_pForm_EditMotClef[ CACTION2 ] );
  4101.  
  4102.         return    TRUE_1;
  4103.     }
  4104.  
  4105.     /*
  4106.       * Efface variables temporaires.
  4107.       */ 
  4108.     free_String( pMsz_PgArboDest );
  4109.     
  4110.     return    FALSE0;
  4111. }
  4112.